SpringCloud一、前提概述、相关微服务和微服务架构理论知识、微服务技术栈有哪些、

①前提概述。微服务架构springcloud的相关学习。

前提知识+相关说明

1、目前,我们学习到最后的微服务架构SpringCloud,基本上需要熟悉以前的学习内容和知识:springmvc、spring、springboot、mybatis、maven、git等等。

2、springcloud不是一门技术,而是一推技术,基于分布式的微服务架构技术的集合体。springcloud微服务架构,大概有二十一种技术之多。这里挑选最常用的技能。俗称cloud技术的五大神兽:eureka、ribbon、feign、hystrix、zuul等等。

3、微服务和微服务架构是一种理念,实现这种理念的技术有很多种。springboot和springcloud只是其中一种。微服务和微服务架构目前出现双雄争霸的状态:

第一种架构是:zookeeper+dubbo或者zookeeper+dubbox的服务应用化拆分和分布式部署。

第二种架构是:微服务架构springcloud的架构。

因此,经常被问到一个问题:谈谈你对dubbo(dubbox)和springcloud的认识和区别,它们两个有哪些优劣,在做技术选型的时候的选择参数和维度有哪些。

4、服务注册与发现:eureka和zookeeper的认识与区别。

5、ribbon和feign负载均衡,类似于nginx负载均衡。ribbon和feign的认识与区别。对这两个如何进行选择,依据是什么。

6、hystrix断路器,牵扯知识有:什么是服务雪崩,什么是服务熔断,什么是服务降级等等。断路器相当于大家用过的保险丝。在企业里面有一定的方案。

②相关微服务和微服务架构理论知识。

微服务、微服务架构和springcloud是三个不同的内容。

扫描二维码关注公众号,回复: 8523549 查看本文章

1、微服务是什么?

官网上有解释:

https://martinfowler.com/articles/microservices.html

Microservices

a definition of this new architectural term

The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.

25 March 2014

While there is no precise definition of this architectural style(就目前而言,对于微服务业界并没有一个统一的、标准的定义)

虽然说没有标准定义,但是,也有一个定义。内容如下:

In short, the microservice architectural style [1] 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的RESTful API)(这是和Dobbo的区别之一,dubbo的通信机制是基于RPC远程过程调用,而springcloud采用的通信机制是基于rest调用)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
 

项目的架构的发展:

早期,单机版,all in one,表示eclipse工作空间里面只有一个工程。随着互联网的崛起,并发量越来越大,后来变成如下形式:

分布式,高内聚低耦合,按照业务拆分成不同模块,一个模块即为一个微服务。

将微服务从技术维度(角度)理解:

微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底
地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,
从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动
或销毁,甚至拥有自己独立的数据库。

对微服务的进一步理解:

简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都运行在自己的进程中,并与轻量级机制(通常是HTTP资源API)进行通信(即表示进程和进程之间基于restful调用)。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署,这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

单机版和分布式微服务的对比:

all in one 单机系统,eclipse里面只有一个大的工程。商品、订单、交易、库存等等,紧紧耦合到一块。其中一个模块出问题,所有war包里面的内容都要进行更改,tomcat上的war包,全部停运,进行修改bug。

而分布式系统,每一个模块可以独立出来,独立运行在tomcat上,如果一个模块出问题了,可以不用全部去修改omcat集群的所有内容,只修改一部分有这个模块的tomcat,修改一个模块上的bug。

分布式的特点:第一,拆分。第二,各自独立的进程。第三,数据库不同,甚至可以一个微服务模块拥有自己独立的数据库。也可以多个微服务模块连接同一个数据库。

单机模式数据库:

微服务,每一个微服务模块可以连接同一个数据库,也可以连接各自的数据库。

2、微服务与微服务架构。

微服务和微服务架构是两个截然不同的概念。

微服务:eclipse工具里面用maven开发的一个个独立的小module,它具体是使用springboot开发的一个小模块,专业的事情交给专业的模块来做,一个模块就做这一件事情。强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面的一个个微服务工程/或者Module。

什么是微服务架构:简单来说是将一个个微服务组装起来,形成项目,用户可以体验到其项目功能的一种架构。


微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

3、微服务优缺点。

优点
每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求
开发简单、开发效率提高,一个服务可能就是专一的只干一件事。
微服务能够被小团队单独开发,这个小团队是2到5人等的开发人员组成。
微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
微服务能使用不同的语言开发。
易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo 。
微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
微服务允许你利用融合最新技术。
微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。(前后端分离,只给json串)。

在开发中,有两种开发模式:

第一种叫前后端分离,我们java程序员相对来说比较幸福,我们只需要管理后端,给前端的H5工程师,就按照约定:Rest地址+输入参数格式和报文约定+输出参数。

如:jQuery中$.post(rest,jsonParameter,callBack);前端收到json串,由前端解析json串。

第二种叫全栈工程师,从头做到尾。H5+JavaEE+bootstrap+css+angularjs+等前端框架+redis+mysql.............


每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。可以灵活搭配,可以连接公共库,也可以连接独立的库。
 

缺点
开发人员要处理分布式系统的复杂性
多服务运维难度,随着服务的增加,运维的压力也在增大
系统部署依赖
服务间通信成本,调用超时
数据一致性
系统集成测试
性能监控……
 

③微服务技术栈有哪些。

什么是微服务技术栈:多种技术的集合体。

我们讨论一个分布式的微服务架构,它需要有哪些维度?

                       一个分布式的微服务架构的维度                        E时代下的数字化生话的维度

                                          服务治理                                                          手机                                                            

                                          服务注册                                                           电脑

                                          服务调用                                                          充电宝

                                         服务负载均衡                                                     路由器

                                          服务监控                                                           光猫

                                             等等                                                                  等等

E时代下的数字化生话的维度可以是各种杂牌子的,如华为、小米、苹果等。。。。。。也可以选一个牌子:小米科技。

 一个分布式的微服务架构的维度也可以是杂牌子的,如这个用apache牌子,那个用springcloud牌子等等。。。。。。如,服务注册选zookeeper,服务负载均衡选nginx,这就是选了不同的牌子(公司)。   也可以选一个牌子的,如springcloud,springcloud这个里面的服务注册时springcloud的eureka,springcloud里面的服务负载均衡是ribbon,feign等。等等。springcloud相当于小米科技,华为科技,苹果,这种一个公司出品的内容。springcloud包含很多微服务架构需要用到的技术。是一个技术集合体。


 

微服务技术栈有哪些:

微服务条目 (即维度)                                                                                落地技术                                                                       备注

服务开发                                                                                               Springboot、Spring、SpringMVC

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

服务配置与管理                                                                                   Netflix公司的Archaius、阿里的Diamond等

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

服务注册与发现                                                                                   Eureka、Consul、Zookeeper等

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

服务调用                                                                                               Rest、RPC、gRPC

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

服务熔断器                                                                                          Hystrix、Envoy等

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

负载均衡                                                                                              Ribbon、Nginx等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

服务接口调用(客户端调用服务的简化工具)                                   Feign等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

消息队列                                                                                              Kafka、RabbitMQ、ActiveMQ等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

服务配置中心管理                                                                              SpringCloudConfig、Chef等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

服务路由(API网关)                                                                         Zuul等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

服务监控                                                                                               Zabbix、Nagios、Metrics、Spectator等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

全链路追踪                                                                                           Zipkin,Brave、Dapper等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

服务部署                                                                                                Docker、OpenStack、Kubernetes等

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

数据流操作开发包                                                                  SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

事件消息总线                                                                                       Spring Cloud Bus

.........................等等

  


  
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

发布了123 篇原创文章 · 获赞 1 · 访问量 4134

猜你喜欢

转载自blog.csdn.net/lbh19630726/article/details/103935481