千家信息网

如何理解微服务架构

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微
千家信息网最后更新 2026年11月02日如何理解微服务架构


因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问题具体看了。本篇描述一下微服务架构的基本概念及个人的一些理解。"微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构"---- Martin Fowler的博客

微服务的特征与界定

单体应用 vs 微服务架构

优点

1:提升开发交流,每个服务足够内聚,足够小,代码容易理解;

2:服务独立测试、部署、升级、发布;

3:按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;每个服务按4:需要选择HA的模式,选择接受服务的实例个数;

5:容易扩大开发团队,可以针对每个服务(service)组件开发团队;

6:提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;

7:新技术的应用,系统不会被长期限制在某个技术栈上;

缺点

没有银弹,微服务提高了系统的复杂度;开发人员要处理分布式系统的复杂性;服务之间的分布式通信问题;服务的注册与发现问题;服务之间的分布式事务问题;数据隔离再来的报表处理问题;服务之间的分布式一致性问题;服务管理的复杂性,服务的编排;不同服务实例的管理。

·

Chris Richardson提出的微服务的三维扩展模型:

X轴,服务实例水平扩展,保证可靠性与性能;

Y轴,功能的扩展,服务单一职责,功能独立;

Z轴,数据分区,数据独立,可靠性保证;



通信问题

微服务的拆分一般会带来IPC通信的问题。通信机制需要完备可靠,服务之间的通信选择应尽量单一,从两个维度对通信的模式进行划分:

第一个维度是一对一还是一对多:

一对一:每个客户端请求有一个服务实例来响应。

一对多:每个客户端请求有多个服务实例来响应。

第二个维度是这些交互式同步还是异步:

同步模式:客户端请求需要服务端即时响应,甚至可能由于等待而阻塞。

异步模式:客户端请求不会阻塞进程,服务端的响应可以是非即时的。

·


微服务架构认为,服务间通信应该就只有这几种模式。AC出于时延、编程模型等方面的考虑,提供了一套通信机制,业务之间的通信要按需选用。

服务的发现与注册

一般的微服务架构里都有两层API GetWay,一层是外部API GetWay,用于用户访问系统;一层是内部API GetWay,内部服务之间的API GetWay。内部API GetWay要解决的问题就是服务发现和服务注册。从这也能看出来,为什么通信的方式要尽量单一,API GetWay有一项工作就是协议转换。

微服务可能是HA主备的,也可能是LB的,怎么找到一个服务?有两种思路,客户端发现(左图),客户端去注册中心查询服务实例列表,自行选择;另一种是服务端发现(右图),添加LB模块,客户端把请求发向LB,由LB根据负载均衡策略选择服务实例;


微服务注册表的典型实现:

ETCD : 是一个高可用,分布式的,一致性的,键值表,用于共享配置和服务发现。两个著名案例包括Kubernetes和Cloud Foundry。
ZK: 是一个广泛使用,为分布式应用提供高性能整合的服务。Apache ZooKeeper最初是Hadoop的子项目,现在已经变成顶级项目。

微服务架构的部署

微服务架构对于部署的要求:

部署速率,Amazon与NetFlix都有千个服务,每个服务都有持续部署的要求,Amazon的服务每秒都会部署一次;

部署自动化,一切都要自动化,IaaS与PaaS解决I层与P层自动化部署,微服务有自动部署与运维工具,并实现Auto-Scaling;

部署提供基础机制,为实现分布式部署要求,部署机制一般都有资源池化、服务的生命周期来看,部署服务 与服务注册是一体的;

部署的粒度:

VM: 部署系统管理的VM的生命周期,如当前AC的iDeploy部署,把AC部署拆分为每个VM的安装、配置与启动;这种方式粒度粗,支撑不了微服务的部署(除非一个服务占用一个VM);

App: 管理应用的生命周期及部署形态,生命周期分为部署、配置、启动、升级等,部署形态有主备、LB、Daemon等;

Container: 相比于APP,容器有更好的隔离性和移植性;

微服务:一般的微服务要么是APP,要么是Container,但AC就不是。受限于ONOS架构,我们的服务是一组feature;

MS部署的解决方案:

TOSCA: 云应用拓扑标准,一种描述云化部署的DSL,我司主推一个标准,PaaS的部署系统和MANO用的都是TOSCA;

Kubernetes:Google开源的容器管理系统,提出了Pod/Service/Labels等概念,以ETCD为中心,PaaS基于K8S开发出了我司的云化部署平台;

Mesosphere:DCOS,数据中心操作系统,基于mesos实现资源池化,有自身的编排工具;分布式LAB基于DCOS的思想做出了一套部署与集群管理系统(HASEN);

微服务的划分

微服务的划分主要是保证微服务功能内聚,职责单一。一般使用DDD(Domain Drive Design)的思想与方法对微服务进行划分,这种方法有点类似于数据库ER图的划分,不断分解数据,保证关系型数据库符合原子性、冗余性的范式要求。当然,微服务的划分比数据表划分更复杂,也没有微服务范式的概念,但思想是一致的。更多的内容,请参考《领域驱动设计》这本书。

分布式一致性

有两个大的思路:全局的分布式事务;事件驱动;

分布式事务就是现在AC的思路,在设计开发中;

事件驱动,忽略了事务的概念,由每个服务在应用层面保存服务的状态,服务之间的通信使用事件机制通知;此种方法可以保证微服务间的独立性,但把问题交给了服务的设计者;具体事件驱动的案例见参考材料;

数据隔离问题

微服务之间数据隔离可以保证服务的独立升级与部署,数据隔离有三个维度:

数据表级隔离;数据表之间独立,没有外键关系;

数据库级隔离;不同服务有不同的数据库;

DBMS级隔离;不同服务有不同的数据库管理系统;

一般做到数据库级隔离就可以了,服务之间的数据交换使用服务间接口。

从单体到微服务

微服务架构是一个衍生架构,都是从单体架构演化而来的。

因为微服务架构本身的复杂性,初创系统出于快速开发、快速验证的考虑,很少在一开始就使用微服务架构。加之微服务的概念在这两年才火,大型单体应用也是看到了开发与维护的成本在不断增加,才会有转型微服务的动力。因此,如何从单体到微服务是一个普遍问题。

从单体到微服务的原则:

逐步演进,不要全部重构。

全部重构,带来极大的成本和风险,系统会有很长的不稳定期。而且,最终的效果也不会很好,在设计时很难想到所有问题。微服务架构的演化思路应该是一步步铺基础设施,一点点拆分微服务。

演化建议(个人建议)

1. 不要增加新的耦合;

不要有编译依赖,如直接import其它模块的类;

使用版本建议的通信方式,不要使用osgiservice,这个耦合还是很强;不要直接访问其它模块的数据表;

避免不必要的亲合性,注意特性之间的状态,如A特性访问B特性的2个请求有状态,那这两个特性实例就有亲合性;

2. 前后端分离;

前后端业务分离,前端之间不会耦合,能前端做的,就放在前端;

3. 独立的服务逐渐拆出;

逐步拆出功能独立的微服务,对有特殊DFX要求的微服务也可以优先拆出;

DevOps与微服务架构

DevOps是09年提出来的概念,但一直没有太火。直到14年,容器与微服务架构的提出,DevOps才得到了快速的发展。DevOps不单是一个实现自动化的工具链,而是组织、流程与技术的结合。组织上强调全栈团队、团队特性专一、团队自治;技术上打通开发与运维;流程上强调端到端、可视化、灰度升级、A/B测试等。

对于DevOps,MS不是必须的,但MS为DevOps提供了最好的架构支撑,对于组织和流程的要求也是一致的。所以,也有人称MS是DevOps架构。
目前,华为云对微服务的支持投入巨大,在国内率先支持Go语言服务框架!现在,围绕微服务正在如火如荼的开展一系列体验活动! 有兴趣的朋友可以前往查看! https://activity.huaweicloud.com/cse/index.html?dfk


服务 架构 数据 之间 问题 系统 通信 分布式 独立 应用 开发 隔离 实例 管理 单体 客户 客户端 机制 数据库 模式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 鸠鸠互联网科技 科技类互联网 互联网金融与金融科技 互联网科技缩写 融势互联网科技 深圳市运趣互联网科技有限公司 创业天下互联网科技有限公司 如何创新互联网科技 内蒙古九一互联网科技 科技大学互联网 卡尔迅互联网科技有限公司 互联网科技包装股份有限公司上市 东营紫格互联网科技 普陀区互联网教育科技管理办法 保山互联网科技靠谱吗 美国五大互联网科技公司市值多少 互联网科技和医药行业 高科技和互联网的现代国家 山东亿川互联网科技有限责任公司 广州全民伙伴互联网科技有限公司 互联网 科技创新 互联网金融公司科技 中国 科技 互联网 盛创互联网科技有限公司 甘肃拓世互联网科技有限公司 厦门千工互联网科技有限公司 上海钢联属于互联网科技股吗 四川互联网展示科技馆设计 互联网硬科技公司 重庆科技产业互联网有哪些
0