淘宝做的网站优化,电子商务网站开发难点,网站开发与设计模板,网址短链接生成微服务
什么是微服务#xff1f;
微#xff1a;单个服务的设计#xff0c;所有参与人从设计、开发、测试、运维所有人加起来只需要两个披萨就够了
服务#xff1a;一定要区别于系统#xff0c;服务一个或者一组相对较小且独立的功能单元#xff0c;是用户可以感知的最…微服务
什么是微服务
微单个服务的设计所有参与人从设计、开发、测试、运维所有人加起来只需要两个披萨就够了
服务一定要区别于系统服务一个或者一组相对较小且独立的功能单元是用户可以感知的最小功能集
微服务是一种架构这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露API来实现。这些独立的微服务不需要部署在同一个虚拟机同一个系统和同一个应用服务器中。
微服务的由来
微服务最早由Martin Fowler与James Lewis于2014年共同提出微服务架构风格是一种使用一套小服务来开发单个应用的方式途径每个服务运行在自己的进程中并使用轻量级机制通信通常是HTTP API这些服务基于业务能力构建并能够通过自动化部署机制来独立部署这些服务使用不同的编程语言实现以及不同数据存储技术并保持最低限度的集中式管理。
为什么需要微服务
在传统的IT行业软件大多是各种独立系统的堆砌这些系统的问题总结来说就是拓展性差可靠性不高维护成本高。到后面引入了SOA服务化但是由于 SOA 早期均使用了总线模式这种总线模式是与某种技术栈强绑定的比如J2EE。这导致很多企业的遗留系统很难对接切换时间太长成本太高新系统稳定性的收敛也需要一些时间。最终 SOA 看起来很美但却成为了企业级奢侈品中小公司都望而生畏。
单体应用系统
单体架构在规模比较小的情况下工作情况良好但是随着系统规模的扩大他暴露出来的问题也越来越多主要有以下几点
复杂性逐渐变高 比如有的项目有十几万行的代码各个模块之间区别比较模糊逻辑比较混乱代码越多复杂性越高越难解决遇到的问题 技术债务逐渐上升 公司的人员流动是再正常不过的事情有的员工在离职之前疏于代码质量的自我管束导致留下来很多坑由于单体项目代码量庞大的惊人留下的坑很难被发觉这就给新来的员工带来很大的烦恼人员流动越大所留下的坑越多也就是所谓的技术债务越来越多。 部署速度逐渐变慢 单体架构的模块非常多代码量非常大导致部署项目所花费的事件越来越多曾经有的项目启动就要一二十分钟这是多么恐怖的事情啊启动几次项目一天的时间就过去了留给开发者开发的时间就非常少了。 阻碍技术创新 比如以前的某个项目使用struts2写的由于各个模块之间有着千丝万缕的联系代码量大逻辑不够清楚如果现在想用spring mvc来重构这个项目将是非常困难的付出的成本将非常大所以更多的时候公司不得不硬着头皮继续使用老的struts架构这就阻碍了技术的创新。 无法按需伸缩 比如说电影模块是CPU密集型的模块而订单模块是IO密集型的模块假如我们要提升订单模块的性能比如加大内存、增加硬盘但是由于所有的模块都在一个架构下因此我们在扩展订单模块的性能时不得不考虑其它模块的因素因为我们不能因为扩展某个模块的性能而损害其它模块的性能从而无法按需进行伸缩。
分布式应用系统
由于整个系统运行需要使用到Tomcat和MySQL单台服务器处理的能力有限,2G的内存需要分配给Tomcat和MySQL使用随着业务越来越复杂请求越来越多.。内存越来越不够用了所以这时候我们就需要进行分布式的部署。
我们进行一个评论的请求这个请求是需要依赖分布在两台不同服务器上的组件tomcat和mysql才能完成的。所以叫分布式系统
分布式和单体项目最大的区别在于分布式的项目是分开部署的比如说把数据库,MQ,ES,单独放在一台或者多台服务器上。
集群
在上一个例子中其实是存在问题的当我们任意一个服务器出现单点故障问题服务就无法继续提供所以针对这些问题我们会采用集群的方式来解决那么什么是集群呢
在单机达到瓶颈时我们会选择增加部署相同服务的服务器来构成集群。集群中每个服务器都叫一个节点每个节点提供相同的服务。这样不论是高可用还是负载均衡都可以通过集群的方式来实现而负载均衡的方式也有很多nginx做七层的负载lvs做四层的负载以及硬件的负载F5。高可用则是通过keepalived来实现
系统架构的演变
架构的演变大致为单一应用架构—》垂直应用架构—》分布式服务架构—》流动计算架构微服务—》······
单一应用架构
互联网早期一般网站应用流量较少只需要一个应用将所有代码都部署在一起就可以了这样可以减少开发、部署和维护成本
比如说一个电商系统里面会包含很多用户管理商品管理订单管理物流管理等等很多模块我们会把它们做成一个web项目然后部署到一台tomcat服务器上。
他的优点在于
项目部署简单小型项目的话开发成本低项目部署在一个节点上维护容易他的缺点也是显而易见
缺点
全部功能集成在一个工程中对于大型项目来讲不易开发和维护项目模块之间紧密耦合单点容错率低无法针对不同的模块进行针对性优化和水平扩展
垂直应用架构
随着访问量的逐渐增大单一应用只能依靠增加节点来应对但是这时候会发现并不是所有模块都会有比较大的访问量
还是以上面的电商为例子 用户访问量的增加可能影响的只是用户和订单模块 但是对消息模块的影响就比较小. 那么此时我们希望只多增加几个订单模块 而不增加消息模块. 此时单体应用就做不到了 垂直应用就应运而生了。
所谓的垂直应用架构就是将原来的一个应用拆成互不相干的几个应用以提升效率。比如我们可以将上面电商的单体应用拆分成:
电商系统(用户管理 商品管理 订单管理)后台系统(用户管理 订单管理 客户管理)CMS系统(广告管理 营销管理)
这样拆分完毕之后一旦用户访问量变大只需要增加电商系统的节点就可以了而无需增加后台和CMS的节点。
他的优点在于
系统拆分实现了流量分担解决了并发问题而且可以针对不同模块进行优化和水平扩展。一个系统的问题不会影响到其它系统提高容错率。
缺点
系统之间相互独立无法进行相互调用系统之间相互独立会有重复的开发任务
分布式架构
当垂直应用越来越多重复的业务代码就会越来越多。这时候我们就思考可不可以将重复的代码抽取出来做成统一的业务层作为独立的服务然后由前端控制层调用不同的业务层服务呢 这就产生了新的分布式系统架构。它将把工程拆分成表现层和服务层两个部分服务层中包含业务逻辑。表现层只需要处理和页面的交互业务逻辑都是调用服务层的服务来实现。
优点
抽取公共的功能为服务层提高代码的复用性
缺点
系统间耦合度变高调用关系错综复杂难以维护
SOA架构
在分布式架构下当服务越来越多容量的评估小服务资源的浪费等问题逐渐显现此时需增加一个调度中心对集群进行实时管理。此时用于资源调度和治理中心(SOA Service Oriented Architecture面向服务的架构)是关键。
优点
使用注册中心解决了服务间调用关系的自动调节
缺点
服务间会有依赖关系一旦某个环节出错会影响较大服务雪崩服务关系复杂运维、测试部署困难
注册中心: nacos ,zookeeper ,nacos ,eureka,consul
微服务架构
微服务架构在某种程度上是面向服务的架构他更加强调服务的彻底拆分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZmn75TH-1691465345847)(C:\Users\admin\Desktop\markdown\微服务架构.png)]
优点
服务原子化拆分独立打包、部署和升级保证每个微服务清晰的任务划分利于拓展微服务之间采用RESTful等轻量级http协议相互调用服务各自有自己的单独的职责服务之间松耦合避免因一个模块的问题导致服务崩溃
缺点
分布式系统开发的技术成本高容错、分布式事务服务治理和服务监控关键多服务运维难度随着服务的增加运维的压力也在增大
微服务需要解决的问题
微服务架构简单来叔就是将单体应用进一步拆分拆分成更小的服务每个服务都是一个可以独立运行的项目
微服务架构的常见问题
这么多小服务如何管理他们这么多小服务他们之间如何通讯这么多小服务客户端怎么访问他们这么多小服务一旦出现问题了应该如何自处理这么多小服务一旦出现问题了应该如何排错?
这些问题是任何一个微服务设计者都不能绕过去的因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决
微服务架构的常见概念
服务治理
服务治理就是进行服务的自动化管理其核心是服务的注册与发现
**服务注册**服务实例将自身服务信息注册到注册中心
**服务发现**服务实例通过注册中心获取到注册到其中的服务实例信息通过这些信息去请求他们提供服务
**服务剔除**服务注册中心将出问题的服务自动剔除到可用列表之外使其不会被调用到。
服务调用
在微服务架构中通常存在多个服务之间的远程调用的需求目前1主流的远程调用的技术有基于HTTP请求的RESTFul接口及基于TCP的RPC协议。
REST(Representational State Transfer)这是一种HTTP调用的格式更标准更通用无论哪种语言都支持http协议。 RPCRemote Promote Call一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式、序列化方式和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可并不需要关心底层通信细节和调用过程。 他们之间的区别于联系
比较项RESTFulRPC通讯协议HTTP一般是TCP性能略低较高灵活度高低应用微服务架构SOA架构
服务网关
随着微服务的不断增多不同的微服务一般会有不同的网络地址而外部客户端可能需要调用多个服务的接口才能完成一个业务需求如果让客户端直接与各个微服务通信可能出现
客户端需要调用不同的url地址增加难度。 在一定的场景下存在跨域请求的问题。 每个微服务都需要进行单独的身份认证。 为了解决这些问题API网关顺势而生。
API网关直面意思是将所有API调用统一接入到API网关层由网关层统一接入和输出。一个网关的基本功能有统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后各个API服务提供团队可以专注于自己的的业务逻辑处理而API网关更专注于安全、流量、路由等问题。
服务容错
在微服务当中一个请求经常会涉及到调用几个服务如果其中某个服务不可用没有做服务容错的话极有可能会造成一连串的服务不可用这就是雪崩效应。
我们没法预防雪崩效应的发生只能尽可能去做好容错。服务容错的三个核心思想是
不被外界环境影响。 不被上游请求压垮。 不被下游响应拖垮。
链路追踪
随着微服务架构的流行服务按照不同的维度进行拆分一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上这些软件模块有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器横跨多个不同的数据中心。因此就需要对一次请求涉及的多个服务链路进行日志记录性能监控即链路追踪。