| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 【微服务&SpringBoot&SpringCloud】微服务 -> 正文阅读 |
|
[Java知识库]【微服务&SpringBoot&SpringCloud】微服务 |
文章目录
微服务是一种项目开发的设计思想。初期,我们往往将一个项目整体开发,整体部署。 这样的好处是在项目部署阶段是简单的,但是随着项目的体量的不断的增大,以及项目功能的复杂度越来越高,我们发现整体开发部署的风格已经不再适用了。例如: 微服务的诞生意在解决上述的问题,微服务的一个特点是 微服务架构还有一个技术外的好处,它使整个系统的分工更加明确,责任更加清晰,每个人专心负责为其他人提供更好的服务。
接下来,我将从以下几个方面总结出微服务的风格特点。 1、组件化(Componentization )与服务(Services)了解过vue的朋友会知道,vue其实就是一个组件化编程,组件化编程的好处是我们可以 微服务的一个特点就是将整体项目中的业务模块进行组件化(微服务),我们将每一个服务称之为组件而不是组件库, 因为微服务是独立部署的,那么很多接口调度就变成了远程调度,远程调用比进制内调用更消耗资源,因此远程 API 需要粗粒度(coarser-grained),但这会比较难使用。如果你需要调整组件间的职责分配,当跨越进程边界时,这样做将会很难。 2、围绕业务功能的组织设计一个系统时,将人员划分为 UI 团队,中间件团队,DBA 团队,那么相应地,软件系统也就会自然地被划分为 UI 界面,中间件系统,数据库。如下图: 对于微服务(microservice )而言,根据微服务的划分方法不同,它倾向围绕业务功能的组织来分割服务。这些服务实现商业领域的软件,包括用户界面,持久化存储,任何的外部协作。 这就导致,负责一个服务(微服务)的团队虽具有的技术将是所有的【用户体验(user-experience)、数据库(database)和项目管理(project management)】。这对开发人员的要求提高了一个高度,我们可以通过一张图来进一步的解释。 3、产品不是项目很多的开发团队都倾向与向运维组织方交付一个完成的项目(软件),然后解散构建软件的团队。但是对于微服务的支持者,这个是不被认可的。 正如亚马逊开发管理者所提倡的理念“你构建,你运维(you build, you run it)”。产品的理念,跟业务能力联系起来。不是着眼于完成一个项目(软件),而是有一个持续的关系,是如何能够帮助软件及其用户提升业务能力。 4、强化终端及弱化通道微服务倾向于做如下的选择:强化终端及弱化通道。微服务的应用致力 所谓的"强化终端及弱化通道",就是"低耦合,高内聚"的一种体现,因为本身服务(微服务)之间是通过远程API(接口)进行通信的,我们更希望"高内聚",使得接口的调用高呢更加的纯粹——服务之间的通信。对应的业务尽可能的都是在独立的服务(微服务)中完成。 在整体工风格中,组件在进程内执行,进程间的消息通信通常通过调用方法或者回调函数。从整体式风格到微服务框架最大的问题在于通信方式的变更。从内存内部原始的调用变成远程调用,产生的大量的不可靠通信。因此,你需要把粗粒度的方法成更加细粒度的通信。 5、分散治理集中治理的一种好处是在单一平台上进行标准化,有利于维护。但是我们更加倾向于采用适当的工具解决适当的问题。 当我们把整体式框架中的组件,拆分成不同的服务时,我们在构建它们时有更多的选择,例如:对于一些实时性能要求高的业务模块,那么我就可以使用C++进行开发,… 分散治理有他的绝对好处——物尽其用。对于一个问题而言,我们可以使用能适合它的工具来解决它。 6、分散数据管理在传统的开发中,我们都是共用一个数据库。但是到了微服务阶段,我们更倾向于采用分散数据管理,所谓的分散数据库观管理其实就是 使用事务是因为它能够帮助处理一至性问题,但对时间的消耗是严重的,这给跨服务操作带来难题。分布式事务非常难以实施,因此 选择处理不一致问题对于开发团队来说是新的挑战,但是也是一个常见的业务实践模式。 7、基础设施自动化许多使用微服务架构的产品或者系统,它们的团队拥有丰富的持续部署(CD)以及它的前任持续集成的经验。团队使用这种方式构建软件致使更广泛的依赖基础设施自动化技术。下图说明这种构建的流程: 另一个方面,我们发现使用微服务的团队更加依赖于基础设施的自动化。对于整体架构的部署与微服务架构的部署,我们通过下图进一步的了解。 8、容错性设计使用服务作为组件的一个结果在于应用需要有能容忍服务的故障的设计。任务服务可能因为供应商的不可靠而故障,客户端需要尽可能的优化这种场景的响应。 跟整体构架相比,这是一个缺点,因为它带来的额外的复杂性。这将让微服务团队时刻的想到服务故障的情况下用户的体验。 对于微服务而言,熔断、服务降级、限流显得格外的重要。 熔断 服务降级 限流 限流策略有很多,最简单的比如当单位时间内请求数过多时,丢弃多余的请求。另外,也可以考虑分区限流——仅拒绝来自出错服务的请求。 上文参照Martin Fowler的:Microservices
其实SpringBoot和微服务之间并没有什么直接的联系,毕竟微服务只是一种思想。 说到微服务,在Spring的生态中,不得不提SpringCloud。我们可以通过SpringBoot+SpringCloud搭建一个微服务项目。 值得注意的是,Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于 spring boot使用了 Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务;Spring Cloud是一个基于Spring Boot实现的云应用开发工具。 通过下图,能够进一步了解SpringBoot和SpringCloud与微服务之间的关系 每晚睡前听你说晚安,是属于我的,最简单而持久的幸福… |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 6:47:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |