SpringCloud(一):微服务架构概述
1-1. 系统进化理论概述
在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统;
集中式系统:
集中式系统也叫单体应用,就是把所有的程序、功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供服务;
分布式系统
分布式系统就是把所有的程序、功能拆分成不同的子系统,部署在多台不同的服务器上,这些子系统相互协作共同对外提供服务,
而对用户而言他并不知道后台 是多个子系统和多台服务器在提供服务,在使用上和集中式系统一样;
集中式系统跟分布式系统是相反的两个概念,他们的区别体现在“合”与“分”。
1-2. 系统进化理论背景
系统进化的背景与中国互联网用户规模庞大有巨大关系,中国互联网用户规模有7.7 亿,庞大的用户访问量对系统的架构设计是巨大的挑战;
产品或者网站初期,通常功能较少,用户量也不多,所以一般按照单体应用进行设计和开发,按照经典的 MVC 三层架构设计;随着业务的发展,
应用功能的增加,访问用户的增多,传统的采用集中式系统进行开发的方式就不再适用了,因为在这种情况下,集中式系统就会逐步变得非常
庞大,很多人维护这么一个系统,开发、测试、上线都会造成很大问题,比如代码冲突,代码重复,逻辑错综混乱,代码逻辑复杂度增加,
响应新需求的速度降低,隐藏的风险增大;所以需要按照业务维度进行应用拆分,采用分布式开发,每个应用专职于做某一些方面的事情,
比如将一个集中式系统拆分为用户服务、订单服务、产品服务、交易服务等,各个应用服务之间通过相互调用完成某一项业务功能。
1-3. 什么是微服务架构
分布式强调系统的拆分,微服务也是强调系统的拆分,微服务架构属于分布式架
构的范畴;并且到目前为止,微服务并没有一个统一的标准的定义,那么微服务究竟是什
么?微服务一词源于 Martin Fowler(马丁.福勒)的名为 Microservices 的博文,可以在他的官方博客上找到这篇文章:
http://martinfowler.com/articles/microservices.html中文翻译版本:https://www.martinfowler.cn/articles/microservices.html
简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都
在各自独立的进程中运行,服务之间通过基于 HTTP 的 RESTful API 进行通信协作;被拆分后的每一个小型服务都围绕着系统
中的某一项业务功能进行构建, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等;
由于各个独立的服务之间使用的是基于 HTTP 的 JSON 作为数据通信协作的基础,所以这些微服务可以使用不同的语言来开发;
1-4. 微服务架构的优缺点
1、我们知道微服务架构是将系统中的不同功能模块拆分成多个不同的服务,这些服务进行独立地开发和部署,每个服务都运行在自己的进程内,这样每个服务
的更新都不会影响其他服务的运行;
2、由于每个服务是独立部署的,所以我们可以更准确地监控每个服务的资源消耗情况,进行性能容量的评估,通过压力测试,也很容易发现各个服务间的性能
瓶颈所在;
3、由于每个服务都是独立开发,项目的开发也比较方便,减少代码的冲突、代码的重复,逻辑处理流程也更加清晰,让后续的维护与扩展更加容易;
4、微服务可以使用不同的编程语言进行开发;但是在系统架构领域关于微服务架构也有一些争论,有人倾向于在系统设计与开
发中采用微服务架构实现软件系统的低耦合,被认为是系统架构的未来方向,Martin Fowler(马丁.福勒)也给微服务架构很高的评价;
同时,对微服务架构也有人持反对观点,他们表示:
1、微服务架构增加了系统维护、部署的难度,导致一些功能模块或代码无法复用;
2、随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度;
3、随着微服务的增多,数据的一致性问题,服务之间的通信成本等都凸显了出
来;所以在系统架构时也要提醒自己:不要为了微服务而微服务。
1-5. 为什么选择 Spring Cloud 构建微服务
微服务一词是 Martin Fowler(马丁.福勒)于 2014 年提出来的,近几年微服务架构的讨论非常火热,无数的架构师和开发者在实际项目中实践着微服务架构的
设计理念,他们在微服务架构中针对不同应用场景出现的各种问题,也推出了很多解决方案和开源框架,其中我们国内的互联网企业也有一些著名的框架和方
案;比如:
|
服务基础开发 |
Spring MVC、Spring、SpringBoot |
|
服务注册与发现 |
Netflix 的 Eureka、Apache 的 ZooKeeper 等 |
|
服务调用 |
RPC 调用有阿里巴巴的 Dubbo,Rest 方式 调用有当当网 Dubbo 基础上扩展的 Dubbox、还有其他方式实现的 Rest,比如 Ribbon、Feign |
|
分布式配置管理 |
百度的 Disconf、360 的 QConf、淘宝的 Diamond、Netflix 的 Archaius 等 |
|
负载均衡 |
Ribbon |
|
服务熔断 |
Hystrix |
|
API 网关 |
Zuul |
|
批量任务 |
当当网的 Elastic-Job、Linkedln 的 Azkaban |
|
服务跟踪 |
京东的 Hydra、Twitter 的 Zipkin 等 |
但是在微服务架构上,几乎大部分的开源组件都只能解决某一个场景下的问题,所以这些实施微服务架构的公司
也是整合来自不同公司或组织的诸多开源框架,并加入针对自身业务的一些改进,没有一个统一的架构方案;所以当我们准备实施微服务架构时
,我们要整合各个公司或组织的开源软件,而且某些开源软件又有多种选择,这导致在做技术选型的初期,需要花费大量的时间进行预备研、分析和实验,
这些方案的整合没有得到充分的测试,可能在实践中会遇到各种各样的问题;Spring Cloud 的出现,可以说是为微服务架构迎来一缕曙光,有 SpringCloud
社区的巨大支持和技术保障,让我们实施微服务架构变得异常简单了起来,它不像我们之前所列举的框架那样,只是解决微服务中的某一个问题,而是一个解决
微服务架构实施的综合性解决框架,它整合了诸多被广泛实践和证明有效的框架作为实施的基础组件,又在该体系基础上创建了一些非常优秀的边缘组件将它们
很好地整合起来。加之 Spring Cloud 有其 Spring 的强大技术背景,极高的社区活跃度,也许未来 Spring Cloud 会成为微服务的标准技术解决方案;(原文蛙课网军哥提供)
SpringCloud(一):微服务架构概述的更多相关文章
- 用SpringCloud进行微服务架构演进
在<架构师必须要知道的阿里的中台战略与微服务> 中已经阐明选择SpringCloud进行微服务架构实现中台战略,因此下面介绍SpringCloud的一些内容,SpringCloud已经出来 ...
- Java生鲜电商平台-微服务架构概述
Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...
- springCloud进阶(微服务架构&Eureka)
springCloud进阶(微服务架构&Eureka) 1. 微服务集群 1.1 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...
- Spring Cloud与Docker——微服务架构概述
Spring Cloud与Docker--微服务架构概述 单体应用架构概述 微服务概述 微服务的特性 微服务架构的优点 微服务面临的挑战 微服务的设计原则 单体应用架构概述 传统的服务发布都是采用单体 ...
- SpringCloud学习--微服务架构
目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构? 软件架构是一个包含各种 ...
- springcloud(二) 微服务架构编码构建
微服务架构编码构建 1 基础知识 1.1 版本 2 微服务cloud整体聚合父工程Project 2.1 new project 2.2 字符编码设置 utf-8 2.3 pom.xml 2.4 父工 ...
- 简单记录下SpringCloud的微服务架构和一些概念
一.微服务的注册与发现——Eureka 和许多分布式设计一样,分布式的应用一般都会有一个服务中心,用于记录各个机器的信息.微服务架构也一样,我们把一个大的应用解耦成这么多个那么多个服务,那么在想要调用 ...
- springCloud和docker笔记(1)——微服务架构概述
1.微服务设计原则 1)单一职责原则:只关注整个系统中单独.有界限的一部分(SOLID原则之一) 2)服务自治原则:具备独立的业务能力和运行环境,可独立开发.测试.构建.部署 3)轻量级通信机制:体量 ...
- SpringCloud 构建微服务架构-练习
我使用的springboot的版本为2.0.2.RELEASE,这里概念性的东西我就不粘贴复制了,百度一下 都是 一.启动Eureka注册中心服务 1.新建springboot项目,pom.xml配置 ...
随机推荐
- 2019ICPC南昌邀请赛 Sequence
题意:给出n个点的权值,m次操作,操作为1时为询问,每次询问给出 l 和 r ,求 f(l,r).操作为0时为修改权值.f(l,r)=f(l,l)⊕f(l,l+1)⊕⋯⊕f(l,r)⊕f(l+1,l+ ...
- bzoj3626: [LNOI2014]LCA (树链剖分+离线线段树)
Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. ...
- hdu4217 Data Structure?
Problem Description Data structure is one of the basic skills for Computer Science students, which i ...
- Java对象延迟初始化的实现
一.什么是延迟初始化? 在Java多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销. 延迟初始化实际上就是:当我们要进行一些高开销的对象初始化操作时,只有在使用这些对象时才进行初始 ...
- [备忘] DevOps 工具上的准备清单(不断补充中……)
目录 概念 发展历程 工具清单 规划 概念 从字面上来看,"DevOps"一词是由英文 Development(开发)和 Operations (运维)组合而成,但它所代表的理念和 ...
- Nginx基础 - Nginx+Lua实现灰度发布与WAF
1.Nginx加载Lua环境默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry 1)环境准备 [root@localhos ...
- codevs1068乌龟棋-四维DP,五维如何缩减一维
我们从起点x开始暴力枚举所有决策 于是可以得到如下转移 void dfs(int x,int A,int B,int C,int D,int y) { if (x==n) {ans=max(ans,y ...
- μC/OS-III---I笔记3---时间管理
时间管理相关函数,其实深入根本的理解就是一些对时间任务相关变量,数据结果进行修改的函数这样方便对应任务查找延时等时间相关的任务有没有到期.前面的时间相关的函数是这些操作的基 1.延时函数 OsTIme ...
- js optional chaining operator
js optional chaining operator js 可选链 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效. ?. 操作符的功能类似于 ...
- Android Jetpack All In One
Android Jetpack All In One 在2018年,我们推出了Android Jetpack作为一组库,以帮助开发人员遵循最佳实践,减少样板代码以及编写可在Android版本和设备之间 ...