为什么80%的码农都做不了架构师?>>>
1. 微服务定义
微服务是一种架构设计风格,相对于整体式架构设计而言,微服务把一个包含复杂业务逻辑的大型项目按功能的不同分成一些小型的服务组件,这些组件各自完成某一项单一功能的设计,每一个组件能够进行独立部署和独立运行。这些小型的服务组件就是微服务应用。微服务之间可以通过RestAPI进行快捷地通讯。这样,由众多的微服务应用,就可以组建起一个稳定和高性能的大型平台。
对于一个功能包罗万象的整体式架构的应用平台来说,它有很多局限性:
如系统庞大,不便管理,不便更新,不好扩展,难以维护,性能越来越差,并且问题层出不穷,等等。
而微服务却具有非常明显的优势:
设计灵活,方便迭代和更新,能够快速响应需求的变化,并且非常适合使用敏捷开发方法。而由微服务构建起来的平台,具有高可用和高性能的特性,不但能够适应超大流量的高并发调用,而且能够适应规模化扩充的要求,可以对服务规模进行持续扩展,从而成为一个可以不断进化的生态系统。
2. 微服务结构体系
通过与整体式架构的比较,能够帮助我们更加清晰地理解微服务架构。
如果用一个六边形结构来表示整体式架构的话,可以使用如图1所示的形式来表示。
图1 整体式架构设计
这个六边形结构的核心是领域业务模型,一方面它通过接口层与数据库适配器层、消息适配器层等与外围服务系统通讯,一方面它又通过接口层对外提供RestAPI、WebUI等适配器,为APP和终端用户提供服务。
相对于整体式的六边形结构,微服务结构是一个小六角形结构,如图2所示。
图2 微服务架构设计
这里,每个微服务都是一个独立的应用,可以具有独立的数据库,独立使用文件系统和消息通道等,而对外提供的RestAPI或WebUI等服务,将由不同的微服务应用所提供。
有关这方面的详细描述,请参照:https://www.nginx.com/blog/introduction-to-microservices/。
4. 微服务架构实例
以一个电商平台为例,我们可以将其分为类目、库存、订单、支付、物流、评价及其用户行为等微服务,这些微服务通过统一的API网关进行访问,以提供给管理后台、购物网站前台,甚或大数据分析系统等客户端使用。
图3 电商平台微服务架构设计实例
4. 技术选型
Spring Cloud是一个优秀的微服务开发工具套件,它不但提供了微服务治理的整套工具和服务,也能使我们非常容易和方便地开发一个微服务应用。通过使用工具套件的注册管理、配置管理、边缘代理、断路器等服务,我们可以非常轻易地构建一个微服务治理环境,并且建设一个高度稳定和性能优秀的服务平台。
5. 数据库选型
每个微服务都可以使用独立的数据库管理系统,这样我们就可以根据一个微服务的功能特点来选择使用数据库。例如 ,可用使用MySQL来存储结构化数据,使用MongoDB来存储日志型文档数据,使用Neo4j来存储关联数据,使用Redis存储键-值类型的数据等等。
6. 部署
由于微服务小型而灵活,使用Docker来部署不但轻便快捷,而且能最有效地利用系统资源。同时也可以结合使用LVS、haproxy、nginx来做双机热备和负载均衡等,可以很容易地实现高可用和高负载的分布式架构。如图4所示。
图4 高可用高性能可扩展的微服务网络拓扑
对于一个大型平台来说,可能会拥有数量可观的微服务应用,使用人工的部署将会不太现实,所以,使用自动化部署工具将是微服务部署的有效方法。