当前位置:网站首页>洞见云原生|微服务及微服务架构浅析
洞见云原生|微服务及微服务架构浅析
2022-07-02 06:33:00 【_时光煮雨】
前言
2014年Martin Fowler正式提出了“微服务”的概念:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下 文,选择合适的语言、工具对其进行构建。

Martin Fowler,软件开发领域教父级人物,ThoughtWorks首席科学家,著有《重构:改善既有代码的设计》《分析模式:可复用的对象模型》《领域特定语言》《企业应用架构模式》等经典著作,敏捷开发方法论开创者,微服务概念提出者。
一、单体架构与微服务架构
1、单体架构
一个单体系统是一个大而全的功能集合,每个服务器运行的是这个应用的完整服务。一个应用所有的功能都在一个工程项目里面,项目中的classes、jsp、css、js等前后端资源最终都归档为一个war包部署到服务器。

单体架构的优点:
- 开发、测试、部署都相对简单;
- 技术架构简单。
单体架构的缺点:
- 开发效率较低,开发人员往往需要了解整体业务功能
- 维护成本高,可扩展性较差
- 每次升级部署影响较大、所有服务都将不可用,牵一发而动全身
- 技术选型成本高
2、微服务架构
微服务架构是相对单体应用而言的,基于“低耦合、高内聚”原则,根据实际业务功能将单体应用拆分成多个服务,每个服务提供特定的业务功能(单一职责原则),每个服务都可以单独部署,相互独立。
微服务架构优点:
- 各服务根据高内聚低耦合原则拆分,代码更加简单易于理解
- 开发简单、只专注一个业务模块即可
- 易于扩展
- 前后端分离,易于部署
微服务架构缺点
- 运维部署复杂度提升
- 服务之间通过REST等方式互相调用,增加了通信成本
- 拆分导致的其他问题:如数据一致性问题,分布式事务问题等
单体架构与微服务架构并没有谁好谁不好的问题,只有适合不适合的问题。如果业务相对比较稳定,发版周期较长,则比较适合单体架构。而微服务架构在应对需求的变化、容错处理、服务复用及扩展、提升开发效率、简化交互等方面都有明显的优势。同时,敏捷开发、DevOps、持续集成/持续交付、容器技术、Spring Cloud框架、轻量级服务、领域驱动设计等技术的涌现也使微服务架构成为解决复杂问题的灵丹妙药。
二、微服务架构解决方案有哪些?
- Spring Cloud:是一系列框架的有序集合,它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署。

- Apache ServiceComb:是第一个 Apache 微服务项目, 是一个开源微服务解决方案,实现对微服务应用的高效运维管理。其提供一站式开源微服务解决方案,融合SDK框架级、0侵入ServiceMesh场景并支持多语言。

- ZeroC IceGrid:ZeroC公司的杰作,继承了CORBA的血统,是面向对象的分布式系统中间件。基于 RPC 框架发展而来,具有良好的性能与分布式能力。

- Motan:是开源的 RPC 框架,只支持 Java 语言实现,需要在 Client 端(服务消费者)和 Server 端(服务提供者)引入 SDK。
- Thrift:是一种轻量级的跨语言 RPC 通信方案,支持多达 25 种编程语言。Thrift 有一套自己的接口定义语言 IDL
- ......
总结
微服务架构选型中,我们要根据社区成熟度、流行程度、开发难度、学习曲线、业务实际等多维因素考虑,微服务架构已在云原生架构中发挥着举足轻重的作用,而SpingCloud无疑是我们开发微服务的首选技术解决方案之一。
边栏推荐
- [go practical basis] how to set the route in gin
- C Gaode map obtains the address according to longitude and latitude
- Qt的右键菜单
- Image transformation, transpose
- gocv opencv exit status 3221225785
- 十年开发经验的程序员告诉你,你还缺少哪些核心竞争力?
- Installing Oracle database 19C RAC on Linux
- WSL安装、美化、网络代理和远程开发
- There is a problem with MySQL installation (the service already exists)
- win10使用docker拉取redis镜像报错read-only file system: unknown
猜你喜欢

During MySQL installation, mysqld Exe reports that the application cannot start normally (0xc000007b)`

查看was发布的应用程序的端口

Minecraft air Island service

Talk about the secret of high performance of message queue -- zero copy technology
![[staff] common symbols of staff (Hualian clef | treble clef | bass clef | rest | bar line)](/img/ae/1ecb352c51a101f237f244da5a2ef7.jpg)
[staff] common symbols of staff (Hualian clef | treble clef | bass clef | rest | bar line)

「Redis源码系列」关于源码阅读的学习与思考

Data type case of machine learning -- using data to distinguish men and women based on Naive Bayesian method

Programmers with ten years of development experience tell you, what core competitiveness do you lack?

Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`

【Go实战基础】gin 高效神器,如何将参数绑定到结构体
随机推荐
C#钉钉开发:取得所有员工通讯录和发送工作通知
QT qtimer class
Linux binary installation Oracle database 19C
Jd.com interviewer asked: what is the difference between using on or where in the left join association table and conditions
Sentinel reports failed to fetch metric connection timeout and connection rejection
机器学习实战:《美人鱼》属于爱情片还是动作片?KNN揭晓答案
【Go实战基础】如何安装和使用 gin
What is the future value of fluorite mine of karaqin Xinbao Mining Co., Ltd. under zhongang mining?
2022/2/14 summary
「面试高频题」难度大 1.5/5,经典「前缀和 + 二分」运用题
知识点很细(代码有注释)数构(C语言)——第三章、栈和队列
Finishing the interview essentials of secsha system!!!
win10使用docker拉取redis镜像报错read-only file system: unknown
Programmers with ten years of development experience tell you, what core competitiveness do you lack?
"Interview high frequency question" is 1.5/5 difficult, and the classic "prefix and + dichotomy" application question
C nail development: obtain all employee address books and send work notices
Move a string of numbers backward in sequence
队列的基本概念介绍以及典型应用示例
Using recursive functions to solve the inverse problem of strings
C Baidu map, Gaode map, Google map (GPS) longitude and latitude conversion