一、微服务的现状及未来
1.服务架构的演变
1.1 单体架构
单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。
单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很高,开发速度快,成本低,但缺点也很明显,这时扩展的首先就是考虑服务器的集群处理。
1.2 集群
针对单个服务器在访问量越来越大的情况越来越吃力的情况,我们可以考虑服务器的集群话处理。
集群的部署大大提高了服务的处理能力,同时利用Nginx提供的负载均衡机制,来分发请求,使用户的体验没有改变。
1.3 垂直化
上面的集群部署是可以解决一部分的服务器压力,但是随着用户访问量的增多,集群节点增加到一定阶段的时候,其实作用就已经不是太大了,因为将所有的业务都集中在一起,造成耦合度很高,这时我们可以考虑业务的拆分。来提高系统的性能。比如将原来在一个系统里面的业务拆分为用户系统,订单系统和商品系统。也就是我们讲的垂直化拆分如下:
服务垂直化拆分后是可以大大的提高整体的服务处理能力,但是也会出现很多的冗余的代码,比如用户系统要操作订单库,要操作商品库,订单系统也有可能要操作用户库和商品库等。
1.4 服务化
针对垂直化拆分出现的问题,这时就出现了我们经常听到的SOA(面向服务的架构).什么是SOA呢?在《微服务设计》中有这么一段描述
SOA是一种设计方法,其中包括多个服务,而服务之间通过配合最终会提供一系列功能,一个服务通常以独立的形式存在于操作系统进程中,服务之间通过网络调用,而非采用进程内调用的方式进行通信。
业务重用,共享服务,
1.5 微服务化
在SOA的基础上继续演进就是我们讲的微服务。SOA的服务更细粒度的拆分后就是微服务。根据时间递进。
对基础运维的要求能力会越来越高,虚拟化,容器话等。
微服务和SOA的区别:
1.思想上:微服务的目的是解耦而SOA的目的是实现数据的互通和共享性。
2.协议:微服务会使用一些轻量级的通信协议(Restful API)
3.基础设施要求,微服务更加强调开发运维的持续交付。
2. 微服务架构的需求
2.1 RPC框架
在微服务架构中,服务与服务之间要实现接口的调用我们肯定要通过相关的RPC(Remote Procedure Call)框架来实现。
常用的RPC框架有:Dubbo,Google的GRPC,Apache的Thrift,微博的Motan,京东的EasyRPC等。我们通过RPC框架可以取调用服务提供者提供的服务,但有一个前提是我们要能找到这个服务。通常我们的服务部署都是集群多节点的部署,所以在消费者这端就不可能直接写死在代码里面,这时就涉及到了服务的发现问题,这时就需要另一个组件注册中心了
2.2 注册中心
注册中心实现服务地址管理的功能,解决服务动态感知(上线,下线)。
2.3 负载均衡
在服务注册中心的介绍中我们可以看到负载均衡的应用。我们可以通过Ribbon来实现客户端的负载均衡,负载均衡的策略可以是:轮询,随机,根据响应时间来计算权重的轮询等。
2.4 配置中心
在微服务架构中我们有很多个服务,而每个服务中是都会有单独的配置文件的。里面有很多的配置信息的有关联的,而且对于后期的更新维护也会非常的不方便,这时配置中心就上场了。常用的配置中心有:apollo/Nacos/disconf/zookeeper/diamond/Spring Cloud Config
2.5 网关
网关可以帮助我们完成用户请求的入口,路由。完成统一授权,日志的记录,权限的认证和限流及熔断操作。
2.6 限流、降级、缓存
在现实的微服务架构中的性能是很难满足所有的用户请求,这时我们就可以通过一些措施来保证我们的核心服务的正常运转。
限流:sentinel、hystrix
降级:主动降级(订单评论、广告关闭)、被动降级
缓存:降低数据源访问频率、Redis等
容错机制:服务出现挂机,宕机之后的处理机制。
2.7 Bus
Bus消息总线,实现异步化的通信机制。
2.8 链路监控
因为微服务中的服务实在是太多了,为了能更好的监控个服务的情况,肯定就需要链路监控服务,我们可以通过sleuth+zipkin来实现,应用层监控,系统级监控
3.SpringCloud 生态
SpringCloud生态提供了快速构建微服务的技术组件。https://spring.io/projects/spring-cloud-netflix
3.1 版本号说明
- SR (发行版)
- RC (后续发行版本)
- M1/M2(PRE) 里程碑
- GA 稳定版
- BUILD-XXX 开发版
3.2 SpringCloud和SpringBoot的关联关系
大版本对应:
Spring Cloud | Spring Boot |
---|---|
Angel版本 | 兼容Spring Boot 1.2.x |
Brixton版本 | 兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x |
Camden版本 | 兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x |
Dalston版本、Edgware版本 | 兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x |
Finchley版本 | 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x |
Greenwich版本 | 兼容Spring Boot 2.1.x |
Hoxtonl版本 | 兼容Spring Boot 2.2.x |
在实际开发过程中,我们需要更详细的版本对应:
Spring Boot | Spring Cloud |
---|---|
1.5.2.RELEASE | Dalston.RC1 |
1.5.9.RELEASE | Edgware.RELEASE |
2.0.2.RELEASE | Finchley.BUILD-SNAPSHOT |
2.0.3.RELEASE | Finchley.RELEASE |
2.1.0.RELEASE-2.1.14.RELEASE | Greenwich.SR5 |
2.2.0.M4 | Hoxton.SR4 |
SpringCloud版本是和SpringBoot有关联关系的,官网中可以查看:https://docs.spring.io/spring-cloud/docs/current/reference/html/
到这儿,我们也清楚了要学习好SpringCloud中相关组件的内容,SpringBoot是我们必须要掌握好的一个前置内容.下篇文章开始给大家详细介绍SpringBoot相关的内容,欢迎点赞收藏加关注哦!!!
springbootautoconfiguration注解@conditionalxxxx之前生今世
1.注解@Conditional的定义@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE,ElementType.METHOD})public@interfaceConditional{/***All{@linkCondition}sthatmust{@linkplainCondition#matchesmatch}*inord 查看详情
区块链的前生今世
今晚九点公开课直播为大家讲解区块链的前生今世,参与方式在文章底部。目录历史与现状比特币与区块链智能合约与以太坊币圈与链圈主讲师:PC2012年接触比特币,炒币、挖矿、量化、做市场豆瓣、百度、360、第四范式知乎《... 查看详情
spring源码分析springioc容器之前生今世--defaultlistablebeanfactory源码解读
...,DefaultListableBeanFactory是整个springioc的始祖,研究透它的前生今世对我们理解springioc的概念有着重要的作用。1. DefaultListableBeanFactory 查看详情
一文带您了解5g的价值与应用
一文带您了解5G的价值与应用 5G最有趣的一点是:大多数产品都是先有明确应用场景而后千呼万唤始出来。而5G则不同,即将到来的5G不仅再一次印证了科学技术是第一生产力还给不少用户带来了迷茫——我们为什... 查看详情
rcnn,fastrcnn,fasterrcnn的前生今世:selectivesearch
SelectiveSearchforObjectRecoginition这篇论文是J.R.R.Uijlings发表在2012IJCV上的一篇文章,主要介绍了选择性搜索(SelectiveSearch)的方法。物体识别(ObjectRecognition),在图像中找到确定一个物体,并找出其为具体位置,经过长时间的发展已... 查看详情
续·延迟渲染(deferredrendering)的前生今世(代码片段)
本文由@浅墨_毛星云 出品,转载请注明出处。 文章链接: http://blog.csdn.net/poem_qianmo/article/details/77142101题图为基于DeferredRendering技术的渲染效果图。 在计算机图形学中,延迟渲染(DeferredRendering),即延迟着... 查看详情
一文带您了解client-go的四种客户端
Client-Go简介Client-Go是负责与KubernetesAPIServer服务进行交互的客户端库,利用Client-Go与KubernetesAPIServer进行的交互访问,来对Kubernetes中的各类资源对象进行管理操作,包括内置的资源对象及CRD。Client-Go不仅被Kubernetes项目本身使用,... 查看详情
javanio的前生今世之四nioselector详解(代码片段)
SelectorSelector允许一个单一的线程来操作多个Channel.如果我们的应用程序中使用了多个Channel,那么使用Selector很方便的实现这样的目的,但是因为在一个线程中使用了多个Channel,因此也会造成了每个Channel传输效率的降低.使用Selector的... 查看详情
icon的前生今世&iconfont的晋级之路
布吉岛为啥起了个这么文(dou)艺(bi)的名字,话不多说,开始总结??。 1??发展过程1.雪碧图: 起初,大部分图标都是用img来实现的。渐渐发现一个页面的请求资源中图片img占了大部分,所以为了优化有... 查看详情
关于http协议前生今世(转自“博客:老李的地下室”)
申明:此博文转自http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html(非原创)Author:Jeffrey引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与... 查看详情
人类信息技术的前生今世和未来|邬贺铨推荐
文|吕廷杰灯泡不是爱迪生发明的?电话不是贝尔发明的?无线电不是马可尼发明的?第一位上天飞行的不是莱特兄弟的?时间晶体存在记忆?区块链之父是何方神圣?未来人类将半人半机器?人是自然的存在物,社会是人们相... 查看详情
rcnn,fastrcnn,fasterrcnn的前生今世:r-cnn
RegionCNN(RCNN)可以说是利用深度学习进行目标检测的开山之作。作者RossGirshick多次在PASCALVOC的目标检测竞赛中折桂,2010年更带领团队获得终身成就奖,如今供职于Facebook旗下的FAIR。 这篇文章思路简洁,在DPM方法多年平台期后... 查看详情
架构前生今世与流量负载架构设计
...来自于dubbo官网:单一应用架构-垂直应用架构-分布式服务架构-流动计算架构接下来所说的架构演进从不同类型的服务器-->集群服务和动静分离-->分布式系统-->提高数据的性能-->跨语言rpc组合从不同类型服务器的选... 查看详情
一文带您了解区块链五大分类
一、开放技术1、公有链:每个人可参加典型案例:比特币BTC、以太坊ETH特点:系统最为开放,所有人都能够参加区块链数据的维护和读取,易于部署应用程序,完全去中心化不会受到其他机构操纵。2、联... 查看详情
前端模块的前生今世(代码片段)
...稳定的历史。这篇文章我们将讨论这段历史,并且,你讲了解过去的模块的相关知识,以更好的理解当前模块的工作原理。在学习如何在js中创建模块之前,首先需要明白,模块是什么以及为什么会存在模块。环顾你的周边,你... 查看详情
一文快速带您了解kmmcompose和flutter的现状|开发者说·dtalk
本文原作者:恋猫de小郭,原文发布于:GSYTech又到了喜闻乐见的环节,「本篇主要是科普KMM、Compose和Flutter的最新现状」,对于Compose和Flutter大家可能并不陌生,但是对于KMM也许会存在疑惑,KMM全称KotlinMultiplatformM... 查看详情
一文了解微服务低代码实现方式(代码片段)
欢迎来到👏阿提说说👏的博客。很高兴,您能看到我的文章。💡目前云原生比较火,各公司都在考虑把自己的微服务迁移到云原生架构中,我司也不例外,为了能够更好的将我司的微服务迁移到云原... 查看详情
[go专栏-1]go语言的前生今世(代码片段)
[GO专栏-1]Go语言的前生今世博主介绍Go语言的诞生Go语言的早期团队和演化历程Go语言正式公布并开源Go语言的版本结尾💫点击直接资料领取💫博主介绍💂个人主页:苏州程序大白💂个人社区:CSDN全国各地程序猿... 查看详情