微服务架构(micro services)


二. 微服务架构micro services

大地老师Golang入门实战系列教程地址:https://www.itying.com/category-90-b0.html

二. 微服务架构(micro services)

image.png

2.1 微服务架构和微服务

微服务架构:微服务架构是一种具体的设计实现或者设计方案,是将复杂的系统使用组件化的方式进行
拆分,并使用轻量级通讯方式进行整合的一种设计方法。

微服务:微服务是微服务架构具体的实现方案,是通过微服务架构设计方法拆分出来的一个独立的组件
化的小应用。

微服务架构定义的精髓,可以用一句话来描述,那就是“分而治之,合而用之”。将复杂的系统进行拆分
的方法,就是“分而治之”。分而治之,可以让复杂的事情变的简单,这很符合我们平时处理问题的方
法。 使用轻量级通讯等方式进行整合的设计,就是“合而用之”的方法,合而用之可以让微小的力量变动
强大。

2.2 什么是微服务架构

微服务架构是将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间
通信采用的轻量级通信机制(通常用HTTP资源API),这些服务围绕业务能力构建并且可通过全自动部
署机制独立部署。这些服务公用一个最小型的集中式的管理,服务可用不同的语言进行开发,使用不同
的数据储存技术。

在了解微服务之前首先看看单体架构。

单体架构在中小企业内部用的是非常多的,当业务不复杂,团队规模不大的时候,单体架构比微服务架
构具有更高的生产率。我们给大家讲的《golang仿小米商城项目》以及2017年前的淘宝都是单体架
构。
**注意:**下面示例中的服务器和数据库也可以使用docker容器实现

2.2.1 单体架构的程序部署在单台服务器

这种架构是目前中小企业用的最多的架构。其中web服务(nginx)、网站程序、静态资源(图片)、
数据库(Mysql、Redis)都在一台服务器上面。如果每天网站的访问IP在5万以下这种架构完全可以应付
(服务器配置也有关系)

image.png

2.2.2 单体架构的程序部署在多台服务器(负载均衡)

把我们的程序部署到多台服务器上面,然后通过nginx配置负载均衡,当客户访问我们的项目的时候随
机的分配给不同的服务器处理响应,这样可以防止宕机,提升系统运行稳定性。
image.png

2.2.3、单体架构的程序部署在多台服务器(负载均衡+主从数据库)

这样的架构能轻松的应对每天几百万、上千万的访问量

image.png

当每天有上亿访问量,或者更高并发量的时候,上面的方法就有点力不存心了,这个时候我们就可以使
用微服务架构。

2.2.4、微服务架构

微服务架构:通俗的讲就是把单体架构项目抽离成多个项目(服务),部署到多台服务器。
如果用“茶壶煮饺子”来打比方的话,原来我们是在一个茶壶里煮很多个饺子,现在(微服务化之后)则
基本上是在一个茶壶煮一个饺子,而这些饺子就是服务的功能,茶壶则是将这些服务功能打包交付的服
务单元。
image.png

image.png

image.png

2.3 微服务这个概念的由来

据说,早在2011年5月,在威尼斯附近的软件架构师讨论会上,就有人提出了微服务架构设计的概 

念,用它来描述与会者所见的一种通用的架构设计风格。时隔一年之后,在同一个讨论会上,大家决定
将这种架构设计风格用微服 务架构来表示。
起初,对微服务的概念,没有一个明确的定义,大家只能从各自的角度说出了微服务的理解和看
法。
在2014年3月,詹姆斯·刘易斯(James Lewis)与马丁·福勒(Martin Fowler)所发表的一篇博客
中,总结了微服务架构设计的一些共同特点,这应该是一个对微服务比较全面的描述。
原文链接https://martinfowler.com/articles/microservices.html

这篇文章中认为:**“简而言之,微服务架构风格是将单个应用程序作为一组小型服务开发的方法,每 **
**个服务程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围 **
**绕业务功能构建的。可以通过全自动部署机器独立部署。这些服务器可以用不同的编程语言编写,使用 **
不同的数据存储技术,并尽量不用集中式方式进行管理”

在这里我们可能会混淆一个点,那就是微服务和微服务架构,这是两个不同的概念,而我们平时说到
的微服务已经包含了这两个概念了,我们需要把它们说清楚以免学习中纠结。微服务架构是一种设计方
法,而微服务这是指使用这种方法而设计的一个应用。所以我们必要对微服务的概念做出一个比较明确
的定义。

微服务架构是将复杂的系统使用组件化的方式进行拆分,并使用轻量级通讯方式进行整合的一种设
计方法。

微服务是通过这种架构设计方法拆分出来的一个独立的组件化的小应用。

微服务架构定义的精髓,可以用一句话来描述,那就是“分而治之,合而用之”。将复杂的系统进行
拆分的方法,就是“分而治之”。分而治之,可以让复杂的事情变的简单,这很符合我们平时处理问题的
方法。 使用轻量级通讯等方式进行整合的设计,就是“合而用之”的方法,合而用之可以让微小的力量变
动强大。

2.4 微服务架构和单体式架构区别

2.4.1 单体式架构服务

单体架构的优点:

1、部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可
2、技术单一:项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发
3、用人成本低:单个程序员可以完成业务接口到数据库的整个流程
4、项目管理相对较易;
5、测试相对简单直观;
6、应用开发相对简单;
7、横向扩展容易。

**单体架构的缺点: **

1、系统启动慢,一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动,重启
周期边长;
2、系统错误隔离性差,可用性差,任何一个模块的错误可能导致整个系统的宕机;
3、可伸缩性差,系统的扩容只能对整个应用扩容,不能做到对整个功能点进行扩容;
4、线上问题修复时间长,任何一个线上问题修复需要对整个应用系统进行全面升级;
5、交付周期长(需求->设计->开发->测试->现场实施部署,就传统性质的企业而言);

2.4.2 微服务

**微服务的优点: **

1.易于开发和维护:一个服务只关注一个特定的业务功能,所以它业务清晰,代码量少。开发和维
护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用在被维持在一个可控的
状态;
2.单个服务启动快:单个服务代码量少,所以启动快;
3.局部修改易部署:单个应用只要有修改,就得重新部署整个应用,微服务解决了这个问题。一般
来说,对某个微服务进行修改,只需要重新部署这个服务即可;
4.技术栈不受限:在微服务架构中,可以结合业务和团队的特点,合理选用技术栈。例如有些服务可
以使用关系型数据库Mysql,有的服务可以使用非关系型数据库redis。甚至可根据需求,部分服务使用
JAVA开发,部分微服务使用Node.js开发
5.按需收缩:可根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合
微服务的特点,增加内存,升级CPU或增加节点。

**微服务的缺点: **

  1. 运维成本高
  2. 分部式复杂度高
  3. 接口成本高
  4. 重复性劳动
  5. 业务分离困难。

2.4.3 单体架构和微服务架构技术选型

单体架构已经经历了很多年的考验,2018年前互联网上95%的项目都是单体架构。
1、如果您的公司没有运维建议使用单体架构(小公司)
2、如果您的项目并发量不大建议使用单体架构(一天只有几万的访问量)
3、如果您的项目比较简单请建议用单体架构 (小项目)
4、如果您的项目并发量非常大建议使用微服务架构或者serverless架构(比如:一码通系统、单车系
统、物联网平台、物流系统)
5、如果您的项目需求经常变化,公司经常要开展线上活动建议使用微服务架构。
6、单体架构和微服务架构技术选型需要根据实际情况分析(等学完微服务后您就知道如何选型了)

SN对比点微服务架构单体架构结论
1上手难度API 接口调用数据库共享或本地程序调用单体架构胜
2开发效率早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大以包的形式对代码进行模块划分,控制得当即可实现高内聚。但最终都是在数据层面将整个系统耦合在一起微服务架构胜
3系统 设计(高
内聚低耦合)每个业务单独包装成一个微服务,数据和代码都从物理上隔离开来,实现高内聚低耦合相对容易以包的形式对代码进行模块划分,控制得当即可实现高内聚。但最终都是在数据层面将整个系统耦合在一起微服务架构胜
4系统 设计
(扩 展性)独立开发新模块,通过 API 与现有模块交互在现有系统上修改,与现存业务逻辑高度耦合微服务架构胜
5需求变更
响应速度各个微服务组件独立变更,容易实施敏捷开发方法需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败微服务架构胜
6系统升级效率各个微服务组件独立升级,上手和开发效率高,影响面 小需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败微服务架构胜
7运维效率大系统被拆分为多个小系
统,部署和运维难度加大, 但可以利用 DevOps 等方式将运维工作自动化简单直接单体架构胜
8代码复用性微服务组件可以在新项目中直接复用,包括前端页面一般以共享库的形式复用后台代码微服务架构胜
9硬件需求按需为不同业务模块伸缩资源节点,一个系统需部署多个微服务,需要启动多个运行容器整个系统只需要一个运行容器,为整个系统分配资源对于简单项目单体架构胜,对于复杂项目微服务架构胜
10项目成本项目早期和后期,成本变化 曲线平缓项目早期成本低,后期成本大对于简单系统
单体架构胜,
对于复杂系统
微服务架构胜
11非功能需求为单独的微服务按需调优,甚至更换实现方式和程序语 言为整个系统调优,牵一发而动全身微服务架构胜
12职责、成就感拥有明确的职责划分,主人翁意识和成就感加强,容易形成自组织型团队职责不明确,容易产生扯皮行为微服务架构胜
13风险大系统被拆分为小系统,风 险可被控制在小系统内,但也引入了各小系统之间的交互风险系统是一个整体,一荣俱荣,一损俱损微服务架构胜

2.5 为什么要学微服务

1、 会单体架构学习微服务非常简单
2、 微服务是非常热门的话题,企业招聘中也越来越多的要求有微服务开发、架构能力的人才
3、提升技术实力,增加职业转型的可能性
4、微服务解决工作中软件研发难题,比如高并发
5、微服务技术栈不受限、可以方便的和其他语言实现通信
6、如果您是架构师或者项目管理人员微服务是必备技能

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值