【编者的话】微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
微服务的概念源于2014年3月Martin Fowler所写的一篇文章“ Microservices ”。
花椒的服务,无论是和前端靠的比较近的:比如H5官网;还是APP服务:比如用户、直播、经济系统、云控等服务,都是使用PHP开发的。选择PHP的原因如下:
工作中碰到的技术问题:
阿里
阿里使用Java做为主要开发语言,开源出框架也很多,分布式和微服务框架:Dubbo、 Spring Cloud Alibaba这两个框架 。Dubbo曾经一度停止维护,后来重新维护并开源到apache,Dubbo只能称为服务治理框架但距离系统完善微服务体系还有很多不足;Spring Cloud Alibaba 是基于Spring Cloud开源的一套微服务一站式解决方案,目前是一个孵化项目,它的仓库也位于Spring Cloud孵化器中,很具有发展潜力。 如果你想和更多微服务技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态 。
项目地址:
腾讯
腾讯开源微服务框架:Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,它集可扩展协议编解码、高性能RPC通信框架、路由与发现、发布监控、日志统计、配置管理等于一体,但社区的活跃度不怎么高,文档也不够完善。
项目地址: https://github.com/TarsCloud/Tars
华为
华为的ServiceComb框架:HWCloud在2017年6月发布开源的一款微服务框架,集服务注册、发现、通信和微服务治理能力为一体,并默认提供集中化配置,目前已开源到apache,值得关注。
项目地址: https://servicecomb.apache.org
Spring
不用说,写过Java的人都认识,Spring自2003年开源至今,强大的生命力不断更新迭代,Java框架活跃度No1,基本一统Web开发天下,Spring Boot推出后更加赢得广大Java开发者青睐,随后推出的Spring Cloud微服务整套体系,Spring经过十多年的发展已非常成熟,生态也比较完善。
选择Spring Boot 2作为微服务第一步基础,原因如下:
ORM框架选择:
Web容器选择:
选择Undertow:
开发规范:
最终初步搭配:Spring Boot 2 + MyBatis Undertow作为Web容器打入jar包中。
要既保证支持现有业务的推进,又得保证系统稳定,以活动项目作为先锋,先趟一遍坑。
活动项目结构如下:
迭代后的现状架构图:
优化与改进:
持续集成发布由Jenkins改为GitLab。
使用GitLab优点:
注册发现服务,选择Euerka/Nacos。
CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡,在此ZooKeeper保证的是CP,而Eureka则是AP,当然后起之秀阿里开源的Nacos,也值得研究考虑。
其它:
计划中部署如下微服务组件:
什么是Service Mesh?
服务网格(Service Mesh)是致力于解决服务间通讯的基础设施层。它负责在现代云原生应用程序的复杂服务拓扑来可靠地传递请求。实际上,Service Mesh通常是通过一组轻量级网络代理(Sidecar proxy),与应用程序代码部署在一起来实现,而无需感知应用程序本身。
为什么需要Service Mesh?
有了Spring Cloud整套微服务架构,为什么我们还需要Service Mesh?经过上面的介绍不难发现,整个微服务要关注的组件太多了,在从单体应用程序向分布式微服务架构的转型过程中,开发人员和运维人员面临诸多挑战,而且随着规模和复杂性的增长,服务越来越难以理解和管理。如果用TCP协议类比就很恰当,在TCP协议未出来之前,开发人员需要自己考虑服务间数据包的传输、粘包、网络异常重试等问题,网络传输代码与业务代码耦合,而TCP协议出来后,开发者不用关心网络传输具体实现,有更多精力实现自己的业务,网络传输TCP协议就对应服务网格的Sidecar模式,Sidecar模块代理所有非业务功能。
Service Mesh有如下几个特点:
细节图:
鸟瞰图:
Service Mesh相关框架:第一代以Linkerd和Envoy为代表;第二代以Istio和Conduit为代表。
国内大厂已有服务网格的相关实践,蚂蚁金服、华为、腾讯等公司有成熟运营和迭代,这也是将是发展的必然趋势。
Service Mesh实践资料清单: https://www.servicemesher.com/awesome-servicemesh/
参考相关链接:
Spring Cloud:
什么是Service Mesh:Service Mesh实践资料清单:Istio中文网:Pattern: Service Mesh原文链接: