三亚市城乡建设局网站,个人网站设计与制作代码,权威发布海报,有什么做3维的案例网站目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速#xff0c;网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布… 目录 单体式架构的时代单体式架构(Monolithic)优点缺点适用场景单体式架构面临诸多问题1.宽带提速网民增多2.Web2.0时代的特点问题描述优化方向 集群优点缺点适用场景搭建集群后面临诸多问题用户请求问题用户的登录信息数据查询 改进后的架构 垂直架构优点缺点 分布式架构产生分布式架构 分布式和集群的区别集群是个物理形态分布式是个工作方式提升效率的方式不同 新的问题场景假设优化方向 SOA 架构特点 新的问题2SOA架构的问题优化方向 微服务架构什么是微服务微服务架构的特征优点缺点微服务架构面临的挑战技术挑战 微服务 VS SOA1.通讯协议2.服务拆分3.项目迭代 架构演变主流的微服务框架官网DubboSpring CloudSpring Cloud Alibaba 单体式架构的时代 宽带不足1993年前后网络普及率少项目类型以内部管理系统为主项目不需要对外开放对安全性和稳定性的要求是不高的。例如OA、CRM、ERP内容或资讯内容主要由一些媒体、政府、公司等发布对于网民来说更多的是被动的接收
单体式架构(Monolithic)
单体式架构就是将所有业务场景中的表示层、业务逻辑层和数据访问层放在一个工程中最终经过编译、打包为war包或jar包部署在一台服务器上。通俗的说法如果一个war包或者jar包里面包含一个应用的所有功能则是单体式架构。早期的SSH和SSM项目大多是单体式架构的项目
优点
架构简单、运维简单。开发成本低开发周期短
缺点
系统启动慢 一个进程包含了所有的业务逻辑涉及到的启动模块过多会导致系统的启动、重启时间周期过长;系统错误隔离性差、可用性差任何一个模块的错误均可能造成整个系统的宕机;可伸缩性差系统的扩容只能对整个应用扩容成本高。不能做到对某个功能点进行扩容;技术栈受限只能使用1种开发语言
适用场景
适用于业务不复杂、访问量较小的项目例如政府项目、管理系统、crm客户关系管理系统 单体式架构面临诸多问题
1.宽带提速网民增多
时间的年轮来到2004年随之到来的WEB2.0时代实现的ADSL拨号上网宽带提速最高可以达到8M用户量也就不断增加一些门户网站也开始活跃项目就需要考虑安全性和稳定性如果服务器发生宕机则整个应用也随之崩溃
2.Web2.0时代的特点
Web2.0模式下的互联网应用具有以下显著特点去中心化、开放、共享。
用户分享。在Web2.0模式下可以不受时间和地域的限制分享各种观点。用户可以得到自己需要的信息也可以发布自己的观点。信息聚合。信息在网络上不断积累不会丢失。以兴趣为聚合点的社群。在Web2.0模式下聚集的是对某个或者某些问题感兴趣的群体可以说在无形中已经产生了细分市场。开放的平台活跃的用户。平台对于用户来说是开放的而且用户因为兴趣而保持比较高的忠诚度他们会积极的参与其中。
问题描述
产品最终的核心是产品的长期运行作为公司肯定希望这个产品被越来越多的人使用这样才能创建更大的价值。对于整个技术架构来说可能会面临以下挑战
用户量增多访问量不断增大导致后端服务器的负载越来越高用户量增多产品需要满足不同用户的需求来留住用户使得业务场景越来越多并且越来越复杂。业务场景越多越复杂意味着war包或jar包中的代码量会持续上升耦合度也会越来越高。后期的代码维护和版本发布也会很困难。
优化方向
通过横向添加服务器把单台变成多台机器的集群按照业务维度把项目切割成多个项目减少业务的耦合度以及降低单个war包或jar包带来的伸缩性困难的问题。
集群
在单体架构的基础上去搭建集群。如果一台服务器发生宕机其他服务器可以继续运行同时多台服务器也能分担大量用户访问的压力 集群就是单机的多实例在多个服务器上部署多个服务每个服务就是一个节点这些节点的集合就叫做集群。
优点
操作简单容易部署在搭建集群之后可以提升项目的稳定性并且并发量增加也可以承受住。
缺点
每个节点负载相同耦合度高每个具体业务的访问量可能差异很大比如美团外卖美食外卖的访问量一定大于鲜花外卖的访问量这就造成了资源浪费
适用场景
单机处理到达瓶颈的时候你就把单机复制几份这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”所有节点构成了一个集群。每个节点都提供相同的服务那么这样系统的处理能力就相当于提升了好几倍。
集群部署它是把相同应用复制到不同服务器上但是逻辑功能上还是单体应用
搭建集群后面临诸多问题
用户请求问题
用户的请求到底要发送到哪台服务器上如何保证请求平均的分发给不同的服务器从而缓解用户量增加的压力。
用户的登录信息
编写项目时如果用户登录成功了将用户的标识放到Session域中在搭建集群之后如何实现数据共享问题
数据查询
当数据量特别庞大时如果还直接去数据库查询速度很慢如何提升查询效率。
为了解决上述的问题需要使用到的三门技术
Nginx - 解决用户请求分发负载均衡Redis - 解决数据共享并实现缓存功能ElasticSearch \ solr- 解决搜索数据的功能
改进后的架构 垂直架构
比如一个电商项目包含了三个模块,用户模块,商品模块,订单模块商品模块压过大,一般最直接有效的方式就是搭建集群在单体架构的集群上去搭建,效果相对比较差需要在每个服务器上都部署商品模块用户模块,订单模块随着项目的不断更新,项目中的功能越来越多,最严重可能会导致项目无法启动为了解决上述的各种问题演进出了垂直架构
优点
拆分后业务直接的相互影响小减少耦合度能合理地分配硬件资源配合集群后从而提升整个系统的吞吐量
缺点
可能会导致整个系统存在“重复造轮子”的问题而且难于维护
分布式架构
产生
随着项目的不断迭代,新老功能之间需要相互交互,服务器和服务器之间是需要通讯的。我们无法直接实现通讯怎么解决项目一般是分为三层的,Controller,Service,Dao。导致程序变慢的重灾区一般是service和Dao,在搭建集群时,确实针对三层都搭建集群效果不是很好怎么解决为了解决上述的各种问题架构从垂直架构演变到了分布式架构. 实现了模块之间的通讯
分布式架构
分布式架构Distributed Service ArchitectureDSA就是将一个完整的系统按照业务功能拆分成一个个独立的子系统在分布式结构中每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中它们之间通过RPC方式通信。
分布式和集群的区别
集群是个物理形态分布式是个工作方式
分布式一个业务分拆多个子业务部署在不同的服务器上。集群同一个业务部署在多个服务器上。
提升效率的方式不同
分布式是以缩短单个任务的执行时间来提升效率的而集群则是通过提高单位时间内执行的任务数来提升效率
如果一个任务由10个子任务组成每个子任务单独执行需1小时则在一台服务器上执行该任务需10小时。采用分布式方案提供10台服务器每台服务器只负责处理一个子任务不考虑子任务间的依赖关系执行完这个任务只需一个小时。而采用集群方案同样提供10台服务器每台服务器都能独立处理这个任务。假设有10个任务同时到达10个服务器将同时工作1小时后10个任务同时完成这样整身来看还是1小时内完成一个任务。
新的问题
场景假设
场景1假设用户执行下单操作系统的处理逻辑是先去库存子系统检查商品的库存如果库存充足的情况下才会提交订单那么这个检查库存的逻辑是放在订单子系统中还是库存子系统中呢这些业务场景的逻辑可能会被重复创建从而产生冗余的业务代码。能不能把这些共享业务逻辑抽离出来形成可重用的服务呢场景2在一个集团公司下有很多子公司每个子公司都有自己的业务模式和信息沉淀各个子公司之间不进行交互和共享。由于各个子公司之间信息不是互联互通的彼此之间形成了信息孤岛使得价值无法最大化
优化方向
把一些通用的、会被多个上层服务调用的共享业务提取成独立的基础服务并且可以重用。
SOA 架构
当服务越来越多容量的评估小服务资源的浪费等问题逐渐显现此时需增加一个调度中心基于访问压力实时管理集群容量提高集群利用率。此时用于提高机器利用率的资源调度和治理中心(SOA)[ Service Oriented Architecture]是关键。SOAService-Oriented Architecture是基于分布式架构演变而来俗称服务化也就是面向服务开发将共同存在的业务逻辑抽取成一个公共的服务提供给其他结构实现调用服务与服务之间采用RPC远程调用技术。服务里只有业务逻辑没有视图层。
特点
SOA架构模式传输协议采用SOAP协议http/httpsXML实现传输在高并发情况下实现通讯该协议存在大量的冗余性传输非常占用带宽。SOA架构模式实现方案为Web Service或者ESB企业服务总线 新的问题2
SOA架构的问题
SOAP协议实现通讯XML传输非常重效率比较低服务化管理和治理设施不够完善。依赖于中心服务发现机制不适合前后端分离架构模式
优化方向
去除SOA架构中SOAP协议和ESB企业服务总线改为httpjson形式传输接口服务的粒度更加精细化提倡让专业的人去做专业的事。每个服务互不影响。每个服务都是单独独立数据库、Redis连接、MQ等。并且都是独立部署整个服务架构更加轻巧。微服务架构出现了
微服务架构
什么是微服务
微服务的概念源于2014年3月Martin Fowler马丁·福勒微服务的提出者所写的一篇文章Microservices https://martinfowler.com/microservices/。 微服务架构风格是一种将一个单体应用程序开发为一组小型服务的方法每个服务运行在自己的进程中服务间通信采用轻量级通信机制(通常是基于HTTP协议的RESTful API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理服务可用不同的语言开发使用不同的数据存储技术 微服务架构的特征
每个服务按照业务划分服务之间通过轻量级 API 调用可以使用不同语言开发可以使用不同的数据存储技术可独立部署服务之间互相不影响可针对用户访问流量大的服务单独扩展从而能够节约资源管理自动化
优点
逻辑清晰项目复杂度降低通过对共享业务更加细粒度的拆分一个服务只需要关注一个特定的业务领域并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低开发、维护会更加简单技术选型更加灵活每个微服务都有不同的团队来维护所以可以结合业务特性自由选择技术栈可扩展性更强可以根据每个微服务的性能要求和业务特点对服务进行灵活扩展独立部署单个微服务的代码量比较小使得发布更加高效容错性如果某一个服务发生故障可以通过重试、降级等机制实现容错
缺点
性能降低微服务的间通过REST、RPC等形式进行交互通信的延时会受到较大的影响提升了运维的难度版本发布、问题排查、配置管理、监控)数据一致性的问题;
微服务架构面临的挑战
微服务粒度大小难以划分需要设计人员对业务有很好的掌握分布式复杂性主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大微服务之间通信成本较高对微服务之间网络稳定性、通信速度要求较高由于微服务数量较大运维人员运维、部署有较大的挑战
技术挑战
微服务架构的主要目的是实现业务服务的解耦对服务进行治理服务的注册与发现、服务与服务之间的调用、熔断限流、负载均衡、链路追踪、分布式配置中心、服务路由等
微服务 VS SOA
1.通讯协议
微服务只是一种为经过良好架构设计的SOA解决方案是面向服务的交付方案。微服务架构继承了SOA架构优点在微服务架构中去除SOA架构中SOAP协议和ESB企业服务总线改为httpjson形式传输接口。
2.服务拆分
微服务架构比SOA架构的粒度更加精细提倡让专业的人去做专业的事。每个服务互不影响。每个服务都是单独独立数据库、redis连接、MQ等。并且都是独立部署整个服务架构更加轻巧
3.项目迭代
服务拆分微服务与敏捷开发的思想高度结合在一起服务的定义更加清晰同时减少了企业ESB开发的复杂性
架构演变 主流的微服务框架
框架名称说明MotanMotan(茅台)是新浪微博开源的RPC框架官网:github.com/weibocom/motanJSFJSF京服是京东的微服务组件。MSEC毫秒服务引擎MSEC, Mass Service Engine in Cluster是腾讯的一个开源框架适用于在廉价机器组成的集群上开发和运营分布式后台服务。该项目集RPC、名字发现服务、负载均衡、业务监控、灰度发布、容量管理、日志管理、key-value存储于一体目的是提高开发与运营的效率和质量。Dubbo阿里巴巴开源的RPC框架后来加入Apache孵化器并成功毕业。新的名字为Apache Dubbo。DubboX当当网基于Dubbo开源的PRC框架后来并入Apache Dubbo。Netflix OSSNetflix OSS是由Netflix公司开发的一套代码框架用于解决分布式系统的问题如服务注册与发现、负载均衡、熔断降级、限流、网关等。Spring CloudSpring Cloud是由Pivotal公司开源的微服务架构提供了微服务系统架构的一站式解决方案。它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。Spring Cloud NetflixSpring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。Spring Cloud AlibabaSpring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案是阿里巴巴开源中间件与 Spring Cloud 体系的融合。Spring Cloud Alibaba 正式入驻Spring Cloud 官方孵化器并顺利毕业。Spring Cloud 生态下中微服务整理Spring Cloud并没有重复制造轮子它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。主流的微服务治理方案Spring Cloud Netflix和Spring Cloud Alibaba
官网
Dubbo
http://dubbo.io/
Spring Cloud
https://spring.io/projects/spring-cloud
Spring Cloud Alibaba
https://spring.io/projects/spring-cloud-alibaba