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配置 ...
随机推荐
- WinformGDI+入门级实例——扫雷游戏(附源码)
写在前面: 本文将作为一个入门级的.结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解.游戏尚且未完善,但基本功能都有,完整源码在文章结尾的附件中. 整体思路: 扫雷的游 ...
- P1073 最优贸易(最短路)
题目描述 CC C国有n n n个大城市和m mm 条道路,每条道路连接这 nnn个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 mmm 条道路中有一部分为单向通行的道路,一部分为 ...
- JVM调优参数、方法、工具以及案例总结
这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...
- Dapr 已在塔架就位 将发射新一代微服务
微服务是云原生架构的核心,通常使用Kubernetes 来按需管理服务扩展. 微软一直走在 Cloud Native Computing Foundation的 最前沿,并通过使用Kubernetes ...
- KVM Pass-through 上部署 MiniSMB HurricaneII
KVM Pass-through 上部署 MiniSMB HurricaneII 免费网络测试,是一款专门用于测试无线控制器, 智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具 ...
- linux运维面试精华题
Linux运维跳槽面试精华题|第一集 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络 ...
- Redis Cluster 分布式集群(下)
Redis Cluster 搭建(工具) 环境准备 节点 IP 端口 节点① 172.16.1.121 6379,6380 节点② 172.16.1.122 6379,6380 节点③ 172.16. ...
- VS2010下创建MVC4项目注意事项
1.安装VS SP1. 2.安装NuGet Package Manager. (1)打开VS2010,进入"工具--扩展管理器". (2)点击"联机库",等待搜 ...
- 爬虫入门一 基础知识 以及request
title: 爬虫入门一 基础知识 以及request date: 2020-03-05 14:43:00 categories: python tags: crawler 爬虫整体概述,基础知识. ...
- 如何使用 Python 编写后端 API 接口
如何使用 Python 编写后端 API 接口 get API Python3 # coding:utf-8 import json # ModuleNotFoundError: No module ...