PHP的开发效率高。无需编译,开发调试速度快。前端
团队在PHP方面积累的经验丰富:java
成熟的轻量级框架:Web框架QFrame,数据库QFrameDB,服务内部调用SDK:PepperClient,异步消息队列SDK:ProcessClient等git
丰富的LNMP调优经验。github
成熟的持续集成:发布系统。spring
HULK团队提供稳定高效的私有云解决方案:基于LNMP架构下的 Web服务管理:机器管理,Nginx等配置管理,MySQL、Redis等存储服务。数据库
服务治理代码和业务代码耦合度高,不通用。使用Nginx + Lua + 降级代码。降级代码写到业务代码中,新增降级须要新写代码,没有一套通用降级,治理方案,耦合度高,影响业务稳定性。apache
团队维护成本高。服务是分模块的,你们各自维护各自的服务,底层没有核心模块,不一样服务之间充斥着重复代码,各自为战,复用性不足。举例:错误码不少服务是重叠的。后端
服务升级的技术成本很大。举例:经济系统虚拟货币服务分库提高支付能力,因没有成熟的组件, 须要人肉手写分库代码,更须要长时间的回归测试,压力测试才能上线。swoole
服务扩容速度慢,须要申请资源,部署,测试,上线。网络
服务优化,提高单机性能受限框架上限。受限于LNMP每一个请求独享一个进行,同步IO的机制而变得艰难,能够选择更换框架为swoole,选择异步Redis的库,这都须要大量的基础调研、测试、业务代码会被改的面目全非,项目周期会冗长。
整个后端的微服务作到了分拆:用户、直播、消息、经济系统、云控等,项目的开发效率高,可是维护的工做对工程师的能力要求极高,治理、服务扩容、缩容、技术升级等问题仍是困难重重,寸步难行。而Java体系的Spring Cloud在服务注册发现、熔断限流、服务网关、分布式配置等一道解决,而不是在PHP方案上本身找开源去拼凑重构,这方面Java更成熟和成体系,并且Java体系在新兴的微服务架构Service Mesh中融合更好。
Dubbo:https://dubbo.apache.org
Spring Cloud Alibaba:https://github.com/alibaba/spring-cloud-alibaba
成熟稳定,社区热度极高,相关资料不少,问题方便解决;
极大地提升了开发效率:使用注解、约定优于配置原则,大大减小了Spring Bean的配置文件;
方便部署,项目可独立打成jar包,无需依赖Web容器;
与微服务相关框架方便集成,几个注解搞定注册中心、配置中心等集成;
提供运行时的应用监控,actuator监控健康;
方便集成第三方http、gRPC组件,跨语言与PHP和Go项目交互。
选择MyBatis,相对于Hibernate更轻便灵活,相对Spring JdbcTemplate功能更强大,使用mybatis-generator能够根据表反向生成model,提高开发效率。
选择Undertow:
Undertow在高负载状况下性能和稳定性要明显优于Tomcat;
比Tomcat更轻便。
选择安装阿里开源的代码规约扫描插件:Alibaba Java Coding Guidelines,能规范你们代码风格,检测潜在的异常,提早发现问题。
activity-java活动业务包
activity-core活动核心包
common-core公共包
pepper-client花椒client包
pepper-statistics花椒统计监控包
pepperbus-client花椒消息总线client包
集成Code Review插件,方便代码审核;
CI/CD自动发布部署,项目.gitlab-ci.yml文件配置好后,当开发分支合并到测试分支,自动编译打包、运行测试用例、部署到测试环境,正式环境发布、回滚也是轻松在Web界面点击几个按钮完成;
集成Kubernetes。
使用OpenFeign做为成为一个轻量级REST API客户端,很方便访问其它http接口,加个配置Hystrix和一个熔断实现类就能够实现熔断;
使用SLF4J的MDC生成TraceId为了将来构建全链路监控作基础;
基于注解+ Springel + Redis实现防并发、幂等性等。
对外Gateway网关;
注册中心Euerka;
配置中心;
日志服务;
服务治理中心;
Wayne + Kubernetes容器化。
应用程序间通信的中间层
轻量级网络代理
应用程序无感知
解耦应用程序的重试/超时、监控、追踪和服务发现