2019独角兽企业重金招聘Python工程师标准>>>

什么是微服务?


微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之

究竟什么是微服务呢?我们在此引用 ThoughtWorks 公司的首席科学家 Martin Fowler 的一段话:

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

看不懂???我有什么办法,反正我能看得懂

我们先来看看传统的项目模式

这是一个办公系统示例,里面有好几个模块,那么假设有个 low 逼程序员写了个性能非常差的代码在财务管理这个模块里面,导致数据库崩溃,那么整个项目都会受到影响,这是非常糟糕的情况

所以我们来总结下传统模式的缺点:

  1. 项目过于臃肿当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护

  2. 资源无法隔离,整个系统的各个功能模块都依赖于同样的数据库、内存等资源,一旦某个功能模块对资源使用不当,整个系统都会被拖垮,耦合度太高

  3. 当系统的访问量越来越大的时候无法灵活扩展,虽然可以进行水平扩展,部署在多台机器上组成集群,但是这种扩展并非灵活的扩展。比如我们现在的性能瓶颈是支付模块,希望只针对支付模块做水平扩展,这一点在单体系统是做不到的

现在对上面的结构图进行优化

我们将每个功能模块提取出来单独去开发部署,客户端、每个模块之间都可以互相调用实现解耦,当然这只是一个简单的示例而已

微服务的特点:

  1. 独立部署,灵活扩展传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(例如员工管理服务,财务管理服务)为单位进行部署 用一张经典的图来表现,就是下面这个样子(左边是传统项目集群,右边是微服务集群):

  1. 资源的有效隔离微服务设计的原则之一,就是每一个微服务拥有独立的数据源,假如微服务A想要读写微服务B的数据库,只能调用微服务B对外暴露的接口来完成。这样有效避免了服务之间争用数据库和缓存资源所带来的问题
  2. 团队组织架构的调整微服务设计的思想也改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端有前端的团队,后端有后端的团队,DBA 有 DBA 的团队,测试有测试的团队。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责(当然,这种垂直划分只是一个理想的架构,实际在企业中并不会把团队组织架构拆分得这么绝对)

网站架构演变过程


单体架构

单体架构也称为传统架构,说白了就是我们经常写的 SSM 或者 SSH 应用,特点就是将整个业务都在一个项目中开发,整个项目一般都分控制层、业务逻辑层、数据访问层,这种项目一般只适合小项目开发

缺点:耦合的太高,一旦某个模块崩溃,可能会影响到整个项目的运行

分布式架构

分布式架构是基于传统架构演变过来的,即将传统的项目以模块拆分成多个子项目,比如:会员项目、订单项目、商品项目等。每个项目都有自己独立的数据库,注意这里是子项目,代表每个子项目都有完整的 mvc 结构

比较:分布式架构比传统架构粒度更细,耦合度降低,更适合团队开发

maven 管理的多模块项目是分布式架构吗??

不一定,如果你仅仅是将项目拆分成 entity、service、dao 几个子工程,然后通过 maven 依赖引入,那其实最终打包后还是一个 war 包啊,其实依然是一个项目。但是如果你打包成多个项目部署,互相通信,那可以称为分布式项目

SOA架构


SOA:(Service Oriented Architecture) 面向服务的架构。把工程拆分成服务层、表现层两个工程,服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需处理和页面的交互,业务逻辑都是调用服务层的服务来实现

SOA 是一个组件模型,它将应用程序的不同功能单元(成为服务),通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,他应该独立于实现服务的硬件平台、操作系统、和变成语言。这是的构建在各种各样的系统中的服务可以从一种统一和通用的方式进行交互

SOA 是把服务分成了若干,表现层分成了若干。表现层和服务层没有耦合关系,表现层可以用任意一个服务层,开发的时候,仅仅是增加服务层和 web 层2个工程,并不会把服务层和 web 层当成一个整个工程。他们是独立的。而分布式架构是 web 和服务层紧紧联系到了一起,一个 web 层对应一个服务层。所以 SOA 比分布式架构更加解耦合,扩展也更容易

标准架构图:

核心组件:ESB 企业服务总线

ESB 全称为 Enterprise Service Bus,即企业服务总线。它是传统中间件技术与 XML、Web 服务等技术结合的产物。ESB 提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB 的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合

特点:

  1. 基于 SOA 的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务
  2. 各各项目(系统)与服务之间采用 webservice、rpc 等方式进行通信
  3. ESB 企业服务总线作为项目与服务之间通信的桥梁

优点:

  1. 将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性
  2. 可以针对不同服务的特点制定集群及优化方案
  3. 采用 ESB 减少系统中的接口耦合

缺点:

  1. 系统与服务的界限模糊,不利于开发及维护
  2. 虽然使用了 ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护
  3. 抽取的服务的粒度过大,系统与服务之间耦合性高

转载于:https://my.oschina.net/zhoumj/blog/3044837

springcloud 系列教程一:微服务与网站架构演变过程相关推荐

  1. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  2. springcloud全局过滤_微服务技术SpringCloud 互联网网站架构演变过程

    网站架构演变过程 传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数据库访问层. 传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务没 ...

  3. SpringCloudSpringCloud Alibaba、微服务架构、网站架构演变过程、Nacos、Feign远程调用、Load Balancer负载均衡、Sentinel限流、Hystriy

    什么是微服务? 微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信.这些服务围绕业务能力来划分,并通过自动化部署机制来独立 ...

  4. Springcloud、分布式和微服务经典面试题

    1.什么是分布式 根据功能进行拆分,分散压力. 2.什么是微服务 根据业务进行拆分,分散能力 3.分布式和微服务的区别 架构不同:微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务.微服 ...

  5. 【SpringCloud】什么是微服务?什么是SpringCloud?

    [SpringCloud]什么是微服务?什么是SpringCloud? 一.什么是微服务? 1. 微服务架构的演变历程 单体架构 单体架构优缺点 2. 分布式架构 分布式架构优缺点 存在问题 3. 微 ...

  6. pytorch打印模型参数_Pytorch网络压缩系列教程一:Prune你的模型

    Pytorch网络压缩系列教程一:Prune你的模型 本文由林大佬原创,转载请注明出处,来自腾讯.阿里等一线AI算法工程师组成的QQ交流群欢迎你的加入: 1037662480 深度学习模型取得了前所未 ...

  7. unifig,是以基于 SpringCloud 的一个分布式 微服务 平台

    介绍: unifig,是以基于 SpringCloud 的一个分布式 微服务 平台. 具有 服务发现注册.配置中心.负载均衡.断路器.数据监控 . 当前开发完成b2c商场的主要业务,以及团购逻辑.是二 ...

  8. SpringCloud(5)— 微服务部署(Docker)

    SpringCloud(5)- 微服务部署(Docker) 一 初识Docker 1.项目部署问题 大型项目组件较多,运行环境较为复杂,部署和维护困难 依赖关系复杂,容易出现兼容性问题 开发,测试,生 ...

  9. SpringCloud + kafka + ELK 搭建微服务日志管理平台

    SpringCloud + kafka + ELK 搭建微服务日志管理平台 2019-12-31,写在前面的话 今天是2019最后一天了,最近几天都在搞这块微服务日志管理的事情,有很多种方案实现,每种 ...

最新文章

  1. centos安装及网络配置
  2. epoll和select区别
  3. Verlet-js JavaScript 物理引擎
  4. linux编写arm执行文件夹,嵌入式ARM-Linux平台上的编译、配置和运行使用
  5. optee的栈指针和栈内存的介绍
  6. 缅甸公民法(1982年人民议会第4号法令)罗伯特 译
  7. 让PIP源使用国内镜像,提升下载速度和安装成功率。
  8. ActiveMQ入门案例-生产者代码实现
  9. 7-21 求前缀表达式的值 (25 分)(思路详解)
  10. bzoj#4722-由乃【倍增,抽屉原理,bitset】
  11. linux高级网络编程教程
  12. 基于Android技术的物联网应用开发
  13. coreldraw x5安装视频教程_免费史上最全的EndNote视频教程
  14. win7建WLAN热点
  15. 在线安装提示失败显示系统镜像MD5不正确怎么办
  16. 补天漏洞响应平台基本介绍
  17. 在计算机系统中对文件执行彻底删除,怎么让电脑删除文件时可以直接彻底进行删除...
  18. 搭建2048网页小游戏
  19. 添加solidworks许可证服务器,SolidWorks许可服务器问题排查
  20. php怎么截取中文第一个字符串,php中怎么截取中文字符串

热门文章

  1. 4-3:TCP协议之UDP协议
  2. ProtoBuf 常用序列化/反序列化API
  3. [bzoj1191][HNOI2006]超级英雄Hero
  4. (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载...
  5. java调用python代码
  6. 资源 | 想进行数据科学项目却没有数据集?26个数据集网站汇总
  7. docker添加jar包_Docker部署jar包
  8. python怎么用matplotlib_用Matplotlib在Python中绘制时间
  9. 功能强大!IntelliJ IDEA 2022.1正式发布
  10. 为什么程序员的女朋友或老婆颜值普遍都偏高?