微服务设计原则和解决⽅案
⼀、微服务架构演进过程
近年来我们⼤家都体会到了互联⽹、移动互联带来的好处,作为IT从业者,在⽣活中时刻感受互联⽹好处的同时,在⼯作中可能感受的却是来⾃⾃互联⽹的⼀些压⼒,那就是我们传统企业的IT建设也是迫切需要转型,需要⾯向外部客户,我们也需要应对外部环境的快速变化、需要快速创新,那么我们的IT架构也需要向互联⽹企业学习作出相应的改进,来⽀撑企业的数字化转型。
我们再看⼀下应⽤架构的演进过程,回忆⼀下微服务架构是如何⼀步⼀步进化产⽣的,最早是应⽤是单块架构,后来为了具备⼀定的扩展和可靠性,就有了垂直架构,也就是加了个负载均衡,接下来是前⼏
年⽐较⽕的SOA,主要讲了应⽤系统之间如何集成和互通,⽽到现在的微服务架构则是进⼀步在探讨⼀个应⽤系统该如何设计才能够更好的开发、管理更加灵活⾼效。
微服务架构的基本思想就是“围绕业务领域组件来创建应⽤,让应⽤可以独⽴的开发、管理和加速”。
⼆、微服务架构的好处
我们总结了四个⽅⾯的优点,分别如下:
(1)、是每个微服务组件都是简单灵活的,能够独⽴部署。不再像以前⼀样,应⽤需要⼀个庞⼤的应⽤服务器来⽀撑。
(2)、可以由⼀个⼩团队负责更专注专业,相应的也就更⾼效可靠。
(3)、微服务之间是松耦合的,微服务内部是⾼内聚的,每个微服务很容易按需扩展。
(4)、微服务架构与语⾔⼯具⽆关,⾃由选择合适的语⾔和⼯具,⾼效的完成业务⽬标即可。
看到这⾥,⼤家会觉得微服务架构挺不错,然⽽还会有⼀些疑问,什么样的应⽤算是⼀个微服务架构的应⽤?该怎样设计⼀个微服务架构的应⽤?那我们来⼀起看看我们推荐的微服务应⽤的设计原则。
三、微服务应⽤4个设计原则
3.1、AKF拆分原则
分布式和微服务的关系AKF扩展⽴⽅体(参考《The Art of Scalability》),是⼀个叫AKF的公司的技术专家抽象总结的应⽤扩展的三个维度。理论上按照这三个扩展模式,可以将⼀个单体系统,进⾏⽆限扩展。
(1)、X 轴:指的是⽔平复制,很好理解,就是讲单体系统多运⾏⼏个实例,做个集加负载均衡的
模式。
(2)、Z 轴:是基于类似的数据分区,⽐如⼀个互联⽹打车应⽤突然⽕了,⽤户量激增,集模式撑不住了,那就按照⽤户请求的地区进⾏数据分区,北京、上海、四川等多建⼏个集。
(3)、Y 轴:就是我们所说的微服务的拆分模式,就是基于不同的业务拆分。
场景说明:⽐如打车应⽤,⼀个集撑不住时,分了多个集,后来⽤户激增还是不够⽤,经过分析发现是乘客和车主访问量很⼤,就将打车应⽤拆成了三个乘客服务、车主服务、⽀付服务。三个服务的业务特点各不相同,独⽴维护,各⾃都可以再次按需扩展。
3.2、前后端分离
前后端分离原则,简单来讲就是前端和后端的代码分离也就是技术上做分离,我们推荐的模式是最好直接采⽤物理分离的⽅式部署,进⼀步促使进⾏更彻底的分离。不要继续以前的服务端模板技术,⽐如JSP ,把Java JS HTML CSS 都堆到⼀个页⾯⾥,稍复杂的页⾯就⽆法维护。这种分离模式的⽅式有⼏个好处:
(1)、前后端技术分离,可以由各⾃的专家来对各⾃的领域进⾏优化,这样前端的⽤户体验优化效果会更好。
(2)、分离模式下,前后端交互界⾯更加清晰,就剩下了接⼝和模型,后端的接⼝简洁明了,更容易维护。
(3)、前端多渠道集成场景更容易实现,后端服务⽆需变更,采⽤统⼀的数据和模型,可以⽀撑前端的web UI 移动App等访问。3.3、⽆状态服务
对于⽆状态服务,⾸先说⼀下什么是状态:如果⼀个数据需要被多个服务共享,才能完成⼀笔交易,那么这个数据被称为状态。进⽽依赖这个“状态”数据的服务被称为有状态服务,反之称为⽆状态服务。
那么这个⽆状态服务原则并不是说在微服务架构⾥就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为⽆状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。
场景说明:例如我们以前在本地内存中建⽴的数据缓存、Session缓存,到现在的微服务架构中就应该把这些本地数据迁移到分布式缓存中存储,让业务服务变成⼀个⽆状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应⽤在运⾏时动态增删节点,就不再需要考虑缓存数据如何同步的问题。
3.4、Restful通信风格
作为⼀个原则来讲本来应该是个“⽆状态通信原则”,在这⾥直接推荐⼀个实践优选的Restful 通信风格 ,因为它有很多好处:
(1)、⽆状态协议HTTP,具备先天优势,扩展能⼒很强。例如需要安全加密是,有现成的成熟⽅案HTTPS可⽤。
(2)、JSON 报⽂序列化,轻量简单,⼈与机器均可读,学习成本低,搜索引擎友好。
(3)、语⾔⽆关,各⼤热门语⾔都提供成熟的Restful API框架,相对其他的⼀些RPC框架⽣态更完善。
当然在有些特殊业务场景下,也需要采⽤其他的RPC框架,如thrift、avro-rpc、grpc。但绝⼤多数情况下Restful就⾜够⽤了。
四、微服务架构带来的问题
做到了前⾯讲的四个原则,那么就可以说是构建了⼀个微服务应⽤,感觉上也不复杂。但实际上微服务也不是个万⾦油,也是有利有弊的,接下来我们来看看引⼊微服务架构后带来的问题有哪些?
(1)、依赖服务变更很难跟踪,其他团队的服务接⼝⽂档过期怎么办?依赖的服务没有准备好,如何验证我开发的功能。
(2)、部分模块重复构建,跨团队、跨系统、跨语⾔会有很多的重复建设。
(3)、微服务放⼤了分布式架构的系列问题,如分布式事务怎么处理?依赖服务不稳定怎么办?
(4)、运维复杂度陡增,如:部署物数量多、监控进程多导致整体运维复杂度提升。
上⾯这些问题我们应该都遇到过,并且也会有⼀些解决⽅案,⽐如提供⽂档管理、服务治理、服务模拟的⼯具和框架; 实现统⼀认证、统⼀配置、统⼀⽇志框架、分布式汇总分析; 采⽤全局事务⽅案、采⽤异步模拟同步;搭建持续集成平台、统⼀监控平台等等。
这些解决⽅案折腾到最后终于搞明⽩了,原来我们是需要⼀个微服务应⽤平台才能整体性的解决这些问题。
五、微服务平台的19个落地实践
5.1、企业IT建设的三⼤基础环境
我们先来宏观的看⼀下,⼀个企业的IT建设⾮常重要的三⼤基础环境:团队协作环境、个⼈基础环境、IT基础设施。
(1)、团队协作环境:主要是DevOps领域的范畴,负责从需求到计划任务,团队协作,再到质量管理、持续集成和发布。
(2)、个⼈基础环境:就是本⽂介绍的微服务应⽤平台,他的⽬标主要就是要⽀撑微服务应⽤的设计开发测试,运⾏期的业务数据处理和应⽤的管理监控。
(3)、IT基础设施:就是我们通常说的各种运⾏环境⽀撑如IaaS (VM虚拟化)和CaaS (容器虚拟化)等实现⽅式。
5.2、微服务应⽤平台总体架构
微服务应⽤平台的总体架构,主要是从开发集成、微服务运⾏容器与平台、运⾏时监控治理、外部渠道接⼊等维度来划分的。
(1)、开发集成:主要是搭建⼀个微服务平台需要具备的⼀些⼯具和仓库
(2)、微服务容器与平台:微服务平台来提供⼀些基础能⼒和分布式的⽀撑能⼒,微服务运⾏容器则运⾏在这个平台之上
(3)、监控治理:则是致⼒于在运⾏时能够对受管的微服务进⾏统⼀的监控、配置等能⼒
(4)、服务⽹关: 则是负责与前端的WEB应⽤ 移动APP 等渠道集成,对前端请求进⾏认真鉴权,然后路由转发
5.3、微服务应⽤平台的运⾏视图
在运⾏期,作为⼀个微服务架构的平台与业务系统,除了业务应⽤本⾝外,还需要有接⼊服务、统⼀门户、基础服务等平台级服务来保障业务系统的可靠运⾏。图中的公共服务就是业务处理过程中需要⽤到的⼀些可选服务。
5.4、微服务平台的设计⽬标
微服务平台的主要⽬标主要就是要⽀撑微服务应⽤的全⽣命周期管理,从需求到设计开发测试,运⾏期的业务数据处理和应⽤的管理监控等,后续将从应⽤⽣命周期的⼏个重要阶段切⼊,结合前⾯提到的设计原则和问题,介绍平台提供的能⼒⽀撑情况。
5.5、微服务开发:前端、后端、混合
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论