微服务理论
什么是微服务
微服务(Microservice Architecture)是最近几年流行的一种架构思想。
一. 微服务的特点
1. 应用组件化
每一个应用都是一个单独的服务,所有的应用都具备可被独立替换和升级,以及可以单独部署。
2. 服务无状态化
这个是可以实现微服务快速扩展的基本条件。
3. 标准而轻量级的通信协议
Restful,把所有的应用通过相同的协议集成在一个平台当中。
4. 去中心化
包含数据去中心化,技术栈去中心化。
1)技术去中心化:既可以使用java,也可以使用php,go。只要使用支持标准通信协议就可以接入微服务平台。
2)数据去中心化:每个服务可以使用自己独立的数据源,可以使用mysql,redis等等。
5. 故障处理设计和实时监控
微服务发展到后面会越来越复杂,服务变多,环境复杂,所以当出现问题需要有相应的系统容错机制和完善的实时的日志监控。
二. 微服务与微服务架构的区别
“微服务”强调的是服务的大小,它关注的是某一个点。而“微服务架构”则是一种架构思想,需要从整体上对软件系统进行通盘的考虑。
三. 微服务与面向服务架构SOA的区别
SOA架构也称为面向服务的分布式架构,是一种粗粒度,松耦合的服务架构,主要强调的是异构系统之间的服务通信,而微服务架构是在SOA是进一步升华,强调的是系统按业务边界做细粒度的拆分和部署。
三. 微服务架构的优点
1. 简单灵活,可以独立部署,对其他服务不会影响。
2. 松耦合,高内聚,易扩展。服务于服务之间是松耦合的。
3. 专注,专业,可靠的小团队。微服务一个很大的特点就是可以和敏捷开发有个好的整合,因为微服务每个模块都可以很小,正好适合小团队。
4. 语言,工具无关系。只要任何语言合适就可以使用。
5. 能够实现复杂的项目的持续集成和持续交付。不像大型项目,发布一次可能几十分钟,牵涉的东西也很多,而微服务项目比较小,启动也很快。
如何实现微服务
一. 微服务应用的4个设计原则
1. AKF拆分原则
说AKF拆分原则之前,先说说AKF扩展立方体。它其实是AKF公司提出应用可以扩展的三个维度,理论上按照这三个扩展模式可以将一个单体的应用无限的扩展。
这三个维度是X轴(水平扩展),Y轴(功能),Z轴(数据分区)。
1)X轴:服务可以水平复制。表示一个单体系统可以运行多个实例。
2)Y轴:服务可以按照功能进行拆分。
3)Z轴:数据可以分区或者扩展。比如一个大型网站,用户数据很大,那么可以按照用户所属地区进行拆分,不同地区的用户呗拆分到一个表中,这样可以提高操作响应速度。
微服务拆分方式
了解到三个维度,见下图就是AKF扩展立方体,包含了X Y Z轴三个维度。看Y轴既按照不同的服务功能进行拆分,强调按照功能模块进行拆分。
拆分要点:
1)低耦合,高内聚,一个服务之完成一个功能模块。
2)按团队结构,这个其实也跟团队也有关系,小规模团队维护,快速开发。建议一个服务让一个团队,独立开发,独立运维,独立维护的,可以快速迭代。
2. 前后端分离原则
前后端分离要求后端和前端各自负责自己领域的任务,精细分工,后端负责返回数据给前端,前端负责渲染页面,效果等。
1)精益团队。可以将团队分为前端部门,后端部门,可以做各自擅长的事情。
2)提高开发效率。实现前后端代码的解耦,专业的人做专业的事情。
3)可以完美的应对复杂多变的前端需求。前后端代码已经解耦了,可以提供多终端化的展示,如PC,移动端,H5,小程序等等,后端代码只需要一套就可以支持。
4)增强代码的可维护性。保证代码整洁性,容易阅读,维护轻松。
下图是前后端分离结构图
3. 服务无状态化
服务无状态化目的是可以弹性扩容/缩容服务。
1)冗余部署多个服务,完全对等。
2)任意一个请求,结果都一样。
3)服务不存储业务的上下文信息。
微服务是需要快速扩容和缩容的,当一台服务器上保存了用户的Session信息,用户下一次访问还必须访问到这台服务器上,如果这台服务挂了,这个用户的信息就没有了。
4. Restful通信风格
Restful通信风格,它有许多优点:
1)无状态协议HTTP,具备先天优势,扩展能力强,例如安全加密有成熟的https。
2)JSON报文序列化,轻量简单,人与机均可读,学习成本低,搜索引擎友好。
3)因为语言无关,各大语言都提供成熟的Restful API框架,相对一些其他RPC框架生态更加完善。
二. 微服务的标准组件