了解微服务框架(Microservice Architecture)
通俗来讲就是拆解功能以此达到对整个系统解耦合的目的,便于系统功能的迭代与维护,同时在实际部署应用中,提高系统整体的稳定性,当单个功能服务阻塞或被挂起时并不会影响到其他子系统的调度。
(优势)应用微服务框架的目的就是提高系统稳定性(其中每个微服务其脆弱性和单体系统还是基本相同的)、降低扩展业务的成本,相较于整个体统的构建,单个服务的构建要便捷的多。在实际部署中,不仅可针对高频次访问的服务进行多部署以充分利用服务资源,各微服务甚至可以使用不同的编程语言(可将java/python/c++等纳入)及不同的数据库。
(劣势)微服务框架同样面临一些开发方面的问题,整体系统的复杂度是上升的,对于项目的部署会有比较高的要求,同时各微服务的通信也要比单体系统复杂。对开发人员也有较高的要求,尤其对单体系统转型分布式微服务的开发者来说,不仅面临系统抽象拆解的问题,还面临数据一致性的问题,在这些方面会增加很多额外的开发成本。
对比单体式开发(Monolithic)
(优势)单体式开发是较为传统的开发模式,其最显著的特征就是在部署时,一个war包即可囊括整个系统服务及相应的依赖,部署简单,开发也简单,所有服务集中管理,对服务资源占用有限即大部分功能都能在一条物理线程上跑完,
(劣势)大型系统维护成本高,无法适应快速迭代和高并发,小改动就面临整个系统的构建,难以扩展。对企业来说,较大的单体式系统还面临新人接手难,代码修改冲突,复用性较差等问题。
微服务框架带来的好处
在开发人员对微服务框架有充分应用的前提下,
对企业来说,可以更快的响应用户需求,业务新概念的落实更快,迭代成本低,使得公司产品更具竞争力;
对开发者来说,迭代开发便利,业务增删简单,容错率高,可以将更多的时间与精力投入到业务优化和需求增长点上;
对用户来说,系统服务体验更流畅,更不容易出错宕机,有利于客户留存和扩增。
微服务框架的基本思路
以SpringCloud Alibaba为例,分布式微服务框架采用阿里云提供的云服务组件及中间件方案。
网关作为限流降级的工具,同时作为统一接收请求并向各微服务器下传的角色,统一管理所有的接口和路径。通过SpringCloud Gateway、RocketMQ等实现。
各微服务的挂载是通过在如Nacos的注册配置中心来实现的,用于为网关寻找对应的服务。
当多条请求通过网关向同一类服务发起时(如服务A),作为负载均衡的Ribbon会根据熔断和均衡的方案决定熔断请求或向相对空闲的服务传递请求。
信息经过微服务处理,向其持久层做增删改查的处理,数据在对应的数据库中产生变动时,数据同步工具会将数据抓取并向其他需要同步的数据库进行同步。
延展
各服务相对独立,当其之间需要相互通信时,同步调用采用的时REST或RPC,异步消息调用可用到Kafka。
同步调用相对简单可将服务间的通信保持一致,但效率上相对较差。异步消息可降低调用服务的耦合性,调用端发起调用后还能继续处理接下来的任务,这样的情况下会影响一致性,在确保被调用方接收到往往需要重复,需要利用broker分布式管理,技术上相对较难但是整体系统能保持稳定运行。
问题
如何在实际生产过程中使用微服务?
对现有单体式系统的微服务化重构?