SpringBoot MartinFlowar微服务译文理解

news/2024/7/24 5:06:31 标签: spring boot, spring, mvc, micro

微服务

是一种架构风格,将业务拆分成模块,部署在不同的主机上提供结构,提供服务,通过http的方式通信

单体应用架构(All in One)

将一个应用的所有应用服务都封在一个应用中,无论什么系统,都把数据库访问,web访问,各个功能放在一个war包内

  • 这样的好处是方便开发测试,部署十分容易,需要扩展时只要把war包复制多份,然后放到多个服务器上在做个负载均衡
  • 缺点是,哪怕要修改任何一个地方,都要停掉整个服务,重新打包、部署这个应用的war包,特别对于一个大型的应用,不可能把所有内容都放在一个应用里面,如何维护,分工合作是一个问题

image-20200909155742579

架构的演变,最开始All in One模式,整个网站就只需要一个war包就能跑,但是单台计算机的能力有限 ,之后的RPC和SOA就是分布式的概念了

微服务架构

打破单体架构的结构方式,将每个功能独立出来,动态组合,需要的功能元素才拿来组合,需要多一些时可以整合多个功能元素,所以微服务架构时对功能元素进行复制,而没有对整个应用进行复制

image-20200909160407000

将服务拆分,根据服务器的压力自由组装

  • 好处是节省了调用资源,每个功能的服务都是一个可替换,可独立升级的软件代码

阅读知识整理:

Martin Flowar 微服务译文

小服务

轻量级通信httpapi

自动化独立部署

不同编程语言、不同存储技术

保持最低限度的集中式管理

整体风格

  • 客户端、数据库、服务端
  • 服务端应用是完整的,一个单独的逻辑执行,任何对系统的改动,都涉及重新构建,部署一个新版本的应用程序
  • 可以通过将程序分成类、函数、命名空间,将程序划分,所有的处理请求都运行在独立的进程中
  • 可以横向扩展,通过负载均衡将多个应用部署在多个服务器上
  • 还不够成功,部署在云中,变更程序的一小部分,就要整体重新构建部署,很难保持模块化结构,会影响到其他模块,不能进行部分扩展

微服务架构风格:

  • 把应用构建成一套服务
  • 服务可以独立部署和扩展
  • 每个服务有模块边界
  • 服务可以用不同程序语言编写,不同团队管理
  • 可以追溯到unix设计原则

image-20200909162243635

微服务风格特性:

组件化(Componentization)与服务(Services)

  • 组件是一个可独立替换和升级的软件单元
  • 微服务架构会使用库,库定义为组件,通过函数调用
  • 服务是进程外组件,通过某种机制通信,把服务当成组件,服务可以部署
  • 如果应用程序时由一个单独进程中的很多库组成,对任何组件的改变都要重新部署整个应用程序
  • 把程序拆分成很多服务,就只需要重新部署改变的服务
  • 好的微服务架构需要更好的解耦和定义边界
  • 把服务当作组件将拥有更清晰的接口,服务通过远程调用机制可以避免,紧耦合的问题,避免破坏封装性
  • 远程调用比进制内调用更消耗资源,需要调整组件间的职责分配,跨越边界时会比较难
  • 服务可以由多个组件开发,可以同时开发部署,例如一个应用程序继承和一个只能由这个服务使用的数据库

围绕业务功能的组织

  • 将大应用程序拆分成小的部分时,需要技术、ui、服务端业务逻辑、数据库、等团队协作进行拆分
  • MVC架构团队划分
    • image-20200909171215144
  • MicroService微服务团队划分
    • 围绕业务功能的组织来割分服务,跨职能团队同时负责构建和运营每个项目,产品被分割成许多单个服务,服务之间通过消息总线通信
    • image-20200909171437879

产品不是项目

建议团队负责整个产品的声明周期,从构建到维护,

强化终端及弱化通道

  • 构建不同进程间通信机制时,有许多的产品和方法能有效的加强通信机制,

  • 微服务倾向于强化终端,以及弱化通道,致力于低耦合和高内聚,

  • 采用单独业务逻辑,接收请求,处理业务逻辑,返回响应,

  • 包含资源的API的HTTP的请求,响应和轻量级消息通信协议

  • 善于利用网络,而不是限制

  • 基于互联网构建系统,经常使用的资源不用声明代价就可以被开发者活运行商缓存

  • 第二种做法

    • 通过轻量级消息总线发部消息
    • 通信协议单一,只负责消息到路由,RabbitMQ、ZeroMQ这样简单的异步机制都没提供
    • 依赖生产者或消费者来处理这类消息

在整体风格中,组织在进程内执行,进程间消息通信通常调用方法、或回调函数,从整体式风格到微服务最大的问题就在通信方式的变更,从内存内部的调用方式变更到远程调用,大量的不可靠通信,需要把粗粒度的方法变成更加细粒度的通信

分散治理

  • 集中治理的好处是在单一平台的标准化,但是解决方案并不是万能的,
  • 建议采用适当的工具解决适当的问题,比如node.js开发前端,C++提高来构建高性能组件,多数据库的切换,提高组件读取性能,
  • 把整体式框架的组件拆分成不同的服务,在构建时能有更好的选择
  • 微服务团队可以有不同的标准

分散数据管理

  • 数据的分散管理,大型的跨系统整合,用户使用不同的售后支持可能得到不同的促销信息
  • 这种问题比较有用的方式为BoundedContext(边界上下文)的领域驱动设计,DDD把复杂的领域拆分成上下文边界以及他们之间的关系,对整体框架和微服务框架都很有用,服务间有明显的关系,帮助对上下文边界进行区分,
  • 整体式框架的应用使用单一逻辑数据库对数据持久化时,企业通常选择在应用的范围内选择一个数据库
  • 微服务让每个服务管理自己的数据库,无论时相同数据库的不同实例,或者是不同数据库系统,这种方法叫Polyglot Persistence (混合持久化),这种方式可以用在整体架构中,但是常用于微服务架构中
  • image-20200909224404174
  • 分散数据意味着管理、数据更新、处理数据、常用的事务无法保证数据的一致性,这种方法通常用在整体架构中
  • 使用事务能处理一致性问题,消耗时间严重,分布式事务难以实施
  • 微服务强调服务间事务的协调,认识一致性,只能通过最终一致性以及通过补偿运算处理问题
  • 通常业务上允许一定的不一致满足快速响应的需求
  • 采用一些恢复的进程来处理这种错误

基础设置自动化

  • 云计算、AWS的发展,减少构建、发布、运维、微服务的复杂性
  • 部署后需要更多的自动化测试,软件的改进能让我们自动的部署到各种新的环境中
  • image-20200909225729180

容错性设计

  • 应用需要有能容忍服务故障的设计,
  • NetFlix的Simian Army可以为每个应用的服务以及数据重心提供日常故障检测和恢复
  • 监控系统,自动恢复,故障检测,自动化测试,提早发现故障

设计改进

  • 拆分软件系统为组件时,组件可以被独立替换和更新
  • 着重写一个组件而不影响协作关系,
  • 服务应该能够报废,不影响长久的发展
  • 使用微服务,只要发布你要修改的服务就可以了,加速发布周期

http://www.niftyadmin.cn/n/1699130.html

相关文章

4、自定义菜单

1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。 2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。 3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页…

mysql数据库 zip压缩效率_MySQL数据库中压缩表性能监测-爱可生

由于压缩表一般都是对字符串类的数据,比如 TEXT,VARCHAR 等压缩,所以针对这块的数据做更新,很容易就把更改日志(上篇介绍过)打满,继而造成频繁的解压和压缩操作。总的来说压缩表适合于读密集、只读、或者极少量更新的业务场景。二…

狂神 SpringBoot 自动装配原理初探

原理初探 自动配置 pom.xml spring pom.xml下有parent spring-boot-starter-parent下还有parent spring-boot-dependencies没有parent了,里面存放着各种东西的jar包 所以pom.xml中 spring-boot-dependencies :存放着核心依赖我们在写或者引入一些sp…

jquery在线引用

转载&#xff1a;http://www.cnblogs.com/lzx-1024/p/7716615.html jquery-3.1.1&#xff08;最新&#xff09;官网jquery压缩版引用地址:<script src"https://code.jquery.com/jquery-3.1.1.min.js"></script> jquery-3.0.0官网jquery压缩版引用地址:&l…

IBatis的分页研究

IBatis的分页研究 博客分类&#xff1a; Ibatis学习摘自&#xff1a; http://cpu.iteye.com/blog/311395 yangtingkun Oracle分页查询语句 ibaits.jar OracleDialect.java 在看JPetStore的代码时&#xff0c;发现它的分页处理主要是通过返回PaginatedList对象来完成的。如&am…

第一个SpringBoot程序 修改banner

第一个SpringBoot程序 两种创建方法 使用网站生成项目 https://start.spring.io/ maven、java版本、项目名称、导出jar、添加springWeb 这种方式一般不用&#xff0c;一般直接idea生成 IDEA创建 可能会遇到的问题 无效发行版本 项目结构设置 项目打开&#xff0c…

joomla+连接不上mysql_如何修复Joomla中的数据库连接错误

您的Joomla网站上有空白页面显示此消息吗&#xff1f;Error displaying the error page: Application Instantiation Error: Could not connect to MySQL.这意味着您的Joomla系统无法连接到您的数据库。由于您的网站数据存储在那里&#xff0c;因此修复连接以恢复网站非常重要。…

mysql revoke select from_Mysql grant to (revoke from)

本文实例&#xff0c;运行于 MySQL 5.0 及以上版本。MySQL 赋予用户权限命令的简单格式可概括为&#xff1a;grant权限on数据库对象to用户一、grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利。grantselectontestdb.*tocommon_user%grantinser…