SpringCloud学习(一):微服务简介
一、前情概要
1、单体架构是什么
1)、一个归档包包含了应用所有功能的应用程序, 我们通常称之为单体应用。
2)、架构单体应用的架构风格, 我们称之为单体架构, 这是一种比较传统的架构风格。

2、单体架构存在的缺点
l 复杂性逐渐变高
l 技术债务逐渐上升
l 部署速度逐渐变慢
l 阻碍技术创新
l 无法按需伸缩
3、架构的演进
l 单体架构
l SOA
l 微服务
l 复杂性逐渐变高
l 技术债务逐渐上升
l 部署速度逐渐变慢
l 阻碍技术创新
l 无法按需伸缩
二、微服务HOT?Why?
1、微服务是什么?
节选自文章:http://www.martinfowler.com/articles/microservices.html
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.
翻译:简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务我们仅做最低限度的集中管理。
l Martin Fowler:简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务我们仅做最低限度的集中管理。
l 来自:http://www.martinfowler.com/articles/microservices.html
2、微服务解决了什么问题?
解决了更新某个模块时,会重新部署整个项目的问题。微服务的模块单独划分,可以单独更新某个模块而其它模块不受影响;模块之间的使用的语言也可以互不相同。

3、微服务具备的特性?
l 1. 每个微服务可独立运行在自己的进程里;
l 2. 一系列独立运行的微服务共同构建起了整个系统;
l 3. 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理、用户管理等;
l 4. 微服务之间通过一些轻量的通信机制进行通信,例如通过REST API或者RPC的方式进行调用;
l 5. 可以使用不同的语言和数据存储技术;
l 6. 全自动的部署机制。
4、微服务优点
1、易于开发和维护
一个微服务只关注一个特定的业务功能,所以他的业务清晰、代码量较少。开发和维护单个微服务相对是比较简单的。而整个应用是由若干个微服务构建而成所以整个应用也会维持在可控状态。
2、启动较快
单个微服务代码量较少,所以启动会比较快。
3、局部修改容易部署
单体应用还要有修改,就得重新部署整个项目,微服务解决了这样的问题。一般来说对某个微服务进行修改,只需重新部署修改的这个微服务即可。
4、技术栈不受限
在微服务中,我们可以结合项目业务及团队的特点,合理的选择技术栈。例如某些服务可使用关系型数据库Mysql;某些微服务有图形计算的需求,我们可以使用Node 4J;甚至可以根据需要,部分微服务使用Java开发,部分微服务使用NodeJS 进行开发。
5、按需伸缩
我们可以根据需求,实现细粒度的扩展。例如:系统中的某个微服务遇到了瓶颈,我们可以结合这个微服务的业务特点,增加内存、升级CPU或者是增加节点。
6、DevOps
DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
5、微服务架构的挑战
1、运维要求较高
更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行;而在微服务中,需要保证几十甚至几百个服务的正常运行与协作,这给项目的运维带来了很大的挑战。
2、分布式固有的复杂性
使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都给我们带来了很大的挑战。
3、接口调整成本高
微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整。
4、重复劳动
很多服务可能都会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。
三、微服务设计原则
0、能不能做成微服务,取决于四个要素:
小:微服务体积小,2 pizza 团队。
独:能够独立的部署和运行。
轻:使用轻量级的通信机制和架构。
松:为服务之间是松耦合的。
1、单一职责原则
每个微服务只需要实现自己的业务逻辑就可以了,比如订单模块,它只需要处理订单的业务逻辑就可以了,其它的不必考虑。
更多课参考维基百科:https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
2、服务自治原则
服务自治,是指每个微服务应该具备独立的业务能力、依赖与运行环境,包括存储的数据库也都是独立的,自己就有一套完整的流程。我们完全可以把它当成一个项目来对待,不必依赖于其它模块。
3、轻量级通信原则
首先是通信的语言非常的轻量,第二,该通信方式需要是跨语言、跨平台的,之所以要跨平台、跨语言就是为了让每个微服务都有足够的独立性,可以不受技术的钳制。
4、接口明确原则
每个服务的对外接口应该明确定义,并尽量保持不变。
四、微服务开发框架浅谈
Spring Cloud:http://projects.spring.io/spring-cloud
Dubbo:http://dubbo.io
Dropwizard:http://www.dropwizard.io
Consl、etcd &etc.
SpringCloud学习(一):微服务简介的更多相关文章
- SpringCloud学习系列-微服务
最近和尚硅谷周阳老师学习了Spring Cloud感觉有必要在这里做下笔记和总结. 软件系统架构演变 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用 ...
- springcloud与docker微服务架构实战--笔记
看了<微服务那些事>之后,Spring boot和Spring Cloud的关系理清楚了,Spring cloud各个模块的作用也了解了. 但是,Spring cloud 与Docker的 ...
- java框架之SpringCloud(2)-Rest微服务案例
在上一章节已经对微服务与 SpringCloud 做了介绍,为方便后面学习,下面以 Dept 部门模块为例做一个微服务通用 Demo —— Consumer 消费者(Client) 通过 REST 调 ...
- Spring Cloud与微服务构建:微服务简介
Spring Cloud与微服务构建:微服务简介 单体架构及其不足 1.单体架构简介 在软件设计中,经常提及和使用经典的3曾模型,即表示层.业务逻辑层和数据访问层. 表示层:用于直接和用户交互,也成为 ...
- SpringCloud学习笔记:服务支撑组件
SpringCloud学习笔记:服务支撑组件 服务支撑组件 在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作.各个服务支撑组件的原理 ...
- SpringCloud微服务简介(一)
Spring Cloud简单认识 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过 ...
- 1、Spring Cloud - 微服务简介
前言: 业界大牛马丁.福勒(Martin Fowler) 这样描述微服务: 论文网址:https://martinfowler.com/articles/microservices.html 就目前而 ...
- SpringCloud与Docker微服务架构实战笔记
一 微服务架构概述 1. 单体应用架构存在的问题 结合:https://www.cnblogs.com/jialanshun/p/10637454.html一起看,在该篇博客中搜索“单块架构的优缺点 ...
- 玩转SpringCloud Spring Cloud 微服务
Spring Cloud 简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...
随机推荐
- Linux 下 ftp的使用
最近需要在Linux上搭建FTP服务,通过网上的一些大神学习了一些新知识,在这个做一个总结: Linux 下FTP 为 vsftp (linux red hat)1.FTP配置路径:/etc/vsft ...
- [solution]JZOJ-5838 旅游路线
[solution] JZOJ-5838 旅游路线 Time Limits 1000ms,Memory Limits 128MB 题面 Description GZOI队员们到X镇游玩.X镇是一个很特 ...
- uva12307(旋转卡壳)
省选前练模板系列 #include<iostream> #include<cmath> #include<cstdio> #include<cstring&g ...
- 新特技软件(Analyzer)添加新用户
新特技软件添加新用户的步骤比较多,记录下来,方便以后使用 安装完软件,处理好自己的AS以后,准备添加用户 步骤一: 我们要在安装Analyzer的服务器上添加新的Windows用户 步骤二:在Anal ...
- Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
- 64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)
上一节的MySQL的配置安装里,并没有用到配置文件my.ini.那在MYSQL8.0.13如何解决密码重置问题呢.我去网上搜了好多的资料都是改配置文件my.ini的,后来终于找到了一条命令:操作步骤如 ...
- Jquery中attr()与prop()的区别
在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同.但是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. 1.操作对象 ...
- Javascript高级编程学习笔记(41)—— DOM(7)DocumentFragment类型
DocumentFragment类型 除开昨天我们了解的两种不常用的类型之外 今天我们要介绍的两种类型可以说使用频率不输于前面最常用的几种元素类型 首先就是DocumentFragment类型 有些小 ...
- 全栈开发工程师微信小程序-上(中)
全栈开发工程师微信小程序-上(中) width: 750rpx; 750rpx代表与屏幕等宽,rpx的缩写responsive pixel,这个单位是可以根据屏幕大小进行自适应调整的像素单位. 小程序 ...
- Kali学习笔记5:被动信息收集工具集
1.Shodan SHODAN搜索引擎不像百度谷歌等,它们爬取的是网页,而SHODAN搜索的是设备. 物联网使用过程中,通常容易出现安全问题,如果被黑客用SHODAN搜索到,后果不堪设想. 网站:ht ...