概述
微服务架构是一种新的软件体系设计形式,提倡将应用系统按照一定的原则将大系统拆分成一系列细小的服务,每个服务只需要专注于一个单一的业务功能即可,并且服务之间可以互相独立运行,采用轻量级API进行通信,单一功能的改变只需要重新构建部署相应的服务即可。
本文将介绍微服务架构的必要性、优缺点和微服务应用的设计原则。
微服务架构的必要性
云并非把原先在物理服务器上跑的东西放到虚拟机里跑,真正的云化不仅是基础设施和平台的事情,应用也要做出改变,改变传统的做法,实现云化的应用——应用的架构、应用的开发方式、应用部署和维护技术都要做出改变,真正发挥云的弹性、动态调度、自动伸缩这些传统IT所不具备的能力。这里说的“云化的应用”也就是“云原生应用”。为了更好的适应云上的开发和交付,需要涉及一些技术,如容器技术和微服务架构等。
微服务架构的优点
微服务架构的有以下一些优点:
- 每个微服务组件都是简单灵活的,能够独立部署。不再像以前一样,应用需要一个庞大的应用服务器来支撑;
- 可以由一个小团队负责更专注专业,相应的也就更高效可靠;
- 微服务之间是松耦合的,微服务内部是高内聚的,每个微服务很容易按需扩展;
- 微服务架构与语言工具无关,自由选择合适的语言和工具,高效的完成业务目标即可。
微服务应用4个设计原则
设计原则1.AKF拆分原则
AKFAKF扩展立方体(参考《The Art of Scalability》),是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论上按照这三个扩展模式,可以将一个单体系统,进行无限扩展。
- 水平复制(X 轴):基于访问量或者IO进行拆分,这样可以让服务自动伸缩多运行几个实例,做个集群加负载均衡的模式;
- 数据分区(Z 轴):基于数据分区进行拆分。比如一个互联网打车应用突然访问量激增,集群模式撑不住了,那就按照用户请求的地区进行数据分区,北京、上海、天津、重庆等多建几个集群;
- Y 轴 :基于不同的业务拆分。
场景说明:比如某滴打车,一个集群撑不住时,分了多个集群,但是用户激增还是不够用,经过分析后发现是乘客和车主访问量很大,就将打车应用拆成了多个乘客服务、车主服务、支付服务。这些服务的业务特点各不相同,独立维护,各自都可以再次按需扩展。
2.前后端分离
这里的前后端分离不是指的开发过程中仅仅在代码层面去分离前后端开发,而是要求在架构方面分离,后端指处理业务逻辑,前端用vue/angular2+/react等web app单独实现,通过调用统一RESTful接口获取数据。这种分离模式的方式有几个好处:
- 可以由前后端的专家来对各自的领域进行优化,这样前端的用户体验优化效果会更好;
- 前后端交互界面更加清晰,就剩下了接口和模型,后端的接口简洁明了,更容易维护;
- 多前端集成场景更容易实现,后端服务无需变更,采用统一的数据和模型,可以支撑多个前端的web UI、移动App、微信等访问。
3.无状态服务
无状态服务原则并不是说在微服务架构里就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。这样便于在云平台实现自动伸缩功能。
无状态服务
场景说明:例如我们以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,微服务应用在运行时通过设置的阈值自动伸缩,就不再需要考虑缓存数据如何同步的问题。
4.Restful通信风格
后端必须提供符合RESTful API标准的接口,RESTful API接口有以下一些优点:
- 无状态协议HTTP,具备先天优势,扩展能力很强。例如需要安全加密时,可以采用现成的成熟方案HTTPS;
- JSON 报文序列化,轻量简单,人与机器均可读,学习成本低;
- 语言无关,各大热门语言都提供成熟的Restful API框架,相对其他的一些RPC框架生态更完善。
微服务架构带来的问题
微服务架构有很多优点,但是不可避免也会带来一些问题:
- 依赖服务变更很难跟踪,依赖的服务没有准备好,如何验证我开发的功能;
- 部分模块重复开发,跨团队、跨系统、跨语言等都会或多或少的重复建设;
- 微服务放大了分布式架构的系列问题,如分布式事务、依赖服务等;
- 运维复杂度陡增,如:部署服务数量多、监控进程多导致整体运维复杂度提升。
上面这些问题都会遇到过,并且也会有一些解决方案: - 提供文档管理、服务治理、服务模拟的工具和框架;
- 实现统一认证、统一配置、统一日志框架、分布式汇总分析;
- 采用全局事务方案、采用异步模拟同步;
- 搭建持续集成平台、统一监控平台等等。
总结
综上所述,微服务架构有很多优点也有不少不足之处,分析到最后终于明白了我们需要的解决方案,需要一个微服务应用治理平台才能整体性的解决这些问题。
网友评论