微服务架构设计方案_第1页
微服务架构设计方案_第2页
微服务架构设计方案_第3页
微服务架构设计方案_第4页
微服务架构设计方案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微服务架构设计方案微服务架构技术设计方案序言本文是一份微服务架构技术设计方案,旨在为读者提供有关微服务的选用、架构设计、思维设计、系统架构设计、总体设计和服务拆分原则等方面的详细信息。微服务的选用微服务是一种面向服务的架构风格,它将应用程序设计为由多个小型自治服务组成的集合。这些服务可以独立部署、升级和扩展,从而提高了应用程序的可靠性、可维护性和可扩展性。在选择微服务架构时,需要考虑以下因素:业务需求、技术架构、团队能力和运维成本等。架构设计微服务架构需要考虑以下几个方面的设计:服务拆分、服务通信、数据管理、部署和监控。服务拆分是将应用程序拆分成多个小型自治服务的过程,需要根据业务需求和技术架构进行拆分。服务通信需要考虑使用何种通信协议和通信方式。数据管理需要考虑如何处理数据的一致性和可靠性。部署需要考虑如何自动化部署和管理服务。监控需要考虑如何监控服务的性能和可用性。思维设计微服务架构需要考虑以下几个方面的思维设计:服务自治、服务可替换、服务可重用、服务可组合和服务可测试。服务自治是指每个服务都有自己的生命周期和管理方式。服务可替换是指可以随时替换服务,而不影响整个应用程序。服务可重用是指可以将服务用于多个应用程序。服务可组合是指可以将多个服务组合成一个更大的服务。服务可测试是指可以对服务进行单元测试和集成测试。系统架构设计微服务架构需要考虑以下几个方面的系统架构设计:服务网关、服务注册和发现、配置管理和安全管理。服务网关是指将所有服务的入口点集中到一个网关上,从而简化客户端的调用过程。服务注册和发现是指将所有服务的信息注册到一个中心化的服务注册表中,并通过服务发现机制来查找服务。配置管理是指管理所有服务的配置信息。安全管理是指保护服务的安全性,包括身份验证和授权等方面。总体设计微服务架构需要考虑以下几个方面的总体设计:应用程序拆分、服务治理、监控和日志管理。应用程序拆分是将应用程序拆分成多个小型自治服务的过程。服务治理是指管理和协调所有服务的运行和交互。监控是指对服务进行实时监控和性能分析。日志管理是指对服务的日志进行收集和分析。服务拆分原则服务拆分需要根据业务需求和技术架构进行拆分,同时需要遵循以下原则:单一职责原则、松耦合原则、高内聚原则、自治原则和可测试原则。单一职责原则是指每个服务只负责一个业务功能。松耦合原则是指服务之间的依赖关系应该尽量少。高内聚原则是指每个服务应该尽可能地包含自己的业务逻辑。自治原则是指每个服务都应该有自己的生命周期和管理方式。可测试原则是指每个服务都应该可以进行单元测试和集成测试。结论本文介绍了微服务架构技术设计方案的各个方面,包括微服务的选用、架构设计、思维设计、系统架构设计、总体设计和服务拆分原则等。通过遵循这些方案,可以构建出高可靠性、高可维护性和高可扩展性的应用程序。服务规划在进行服务规划时,需要考虑到服务的目标、范围和功能。同时,还需要对服务的可靠性、可用性和可扩展性进行评估。在确定了服务规划后,需要对服务进行详细的设计和实现。开发策略在进行开发时,需要遵循一定的开发策略。比如,采用敏捷开发模式,不断迭代和优化服务。同时,也需要考虑到团队协作和代码管理等方面的问题。数据库设计原则在进行数据库设计时,需要遵循一些基本原则。比如,采用标准化的数据结构和命名规范,保证数据的一致性和完整性。同时,也需要考虑到数据的安全性和备份等方面的问题。负载均衡在进行负载均衡时,需要考虑到服务的实际情况和需求。比如,采用硬件负载均衡器或软件负载均衡器,根据服务的流量和负载情况进行动态调整。同时,也需要考虑到高可用性和容错性等方面的问题。性能策略在进行性能优化时,需要采用一些有效的策略。比如,采用缓存技术、异步处理和并发控制等手段,提高服务的响应速度和吞吐量。同时,也需要考虑到资源的合理利用和优化等方面的问题。设计阶段在进行设计阶段时,需要对服务的需求、功能和架构进行详细的分析和设计。同时,也需要考虑到服务的可扩展性和可维护性等方面的问题。在设计阶段完成后,需要进行详细的开发计划和实施方案的制定。开发阶段在进行开发阶段时,需要严格按照设计方案进行实施。同时,也需要进行代码管理和版本控制等方面的工作。在开发阶段完成后,需要进行详细的测试和性能优化等方面的工作。服务调用在微服务架构中,服务之间的调用是非常重要的。服务之间的调用方式主要有AIP网关调用、同步调用、异步调用等多种方式。AIP网关调用是指通过AIP网关来进行服务调用。AIP网关可以进行流量控制、安全认证、负载均衡等多种功能,可以保证服务的稳定性和安全性。同步调用是指服务之间的调用是同步的,即调用方需要等待被调用方返回结果后才能继续执行。同步调用的优点是调用简单,但是在高并发的情况下容易出现阻塞。异步调用是指服务之间的调用是异步的,即调用方不需要等待被调用方返回结果就可以继续执行。异步调用的优点是可以提高并发性能,但是需要考虑异步调用的结果如何通知调用方。服务间调用的权限验证是指在服务之间进行调用时需要进行权限验证,保证只有有权限的服务才能进行调用,从而保证系统的安全性。服务编排是指将多个服务组合在一起形成一个完整的业务流程,从而实现更复杂的业务需求。服务编排可以通过编排工具来实现,也可以通过编写代码来实现。服务的熔断处理是指在服务出现故障或者异常的情况下,通过熔断机制来保证系统的稳定性。熔断处理可以通过设置超时时间、错误率等参数来实现。统一日志管理是指将系统中的日志进行统一管理,从而方便开发人员进行问题排查和系统优化。统一日志管理可以通过使用ELK等日志管理工具来实现。4.4统一监控管理在微服务架构中,服务数量庞大,因此需要进行统一的监控管理。这可以通过使用监控工具来实现,例如Prometheus和Grafana等。这些工具可以帮助开发人员实时监控服务的运行状况,并及时发现并解决问题。4.5统一配置管理在微服务架构中,配置管理也是一个重要的问题。由于服务数量众多,因此需要一个统一的配置管理系统来管理服务的配置。这可以通过使用配置中心来实现,例如SpringCloudConfig和Consul等。这些工具可以帮助开发人员集中管理服务的配置,并且可以实现动态配置更新。4.6分布式缓存在微服务架构中,由于服务之间的调用会产生大量的网络流量,因此需要使用缓存来减少网络流量,提高系统性能。分布式缓存可以通过将数据存储在缓存中,避免重复的计算和查询,并且可以提高系统的响应速度。常用的分布式缓存工具包括Redis和Memcached等。4.7REST资源响应结构在微服务架构中,RESTfulAPI是常用的服务间通信方式。为了保证API的可用性和可扩展性,需要定义一种统一的资源响应结构。这可以通过使用HAL或JSONAPI等规范来实现。这些规范可以帮助开发人员定义API的响应结构,并且可以实现版本控制和文档自动生成等功能。6.测试在微服务架构中,由于服务数量庞大,因此需要进行充分的测试来保证系统的稳定性和可靠性。测试可以分为单元测试、集成测试和端到端测试等不同的层次。常用的测试工具包括JUnit、Mockito和Selenium等。7.持续集成和持续部署在微服务架构中,由于服务数量众多,因此需要使用自动化工具来管理服务的构建、测试和部署等过程。持续集成和持续部署可以通过使用工具链来实现,例如Jenkins和TravisCI等。这些工具可以帮助开发人员自动化管理服务的构建、测试和部署等过程,并且可以实现快速迭代和持续交付。1.选择微服务架构微服务架构是一种分布式架构风格,适用于服务数量庞大、业务复杂的系统。选择微服务架构需要考虑到系统的业务特点、团队的技术水平和组织架构等因素。同时,需要注意微服务架构带来的复杂性和管理难度,需要采用适当的工具和方法来管理微服务架构。微服务架构是一种应用程序的架构风格,它由多个小服务组成。每个服务都在独立的进程中运行,并使用轻量级交互。通常,这些服务是HTTP资源API。这些服务具备独立的业务能力,并可以通过自动化部署方式独立部署。这种风格最大程度地减少了集中管理,并且可以使用多种不同的编程语言和数据存储技术。对于微服务架构系统,由于其服务粒度小,模块化清晰,因此首先要做的是对系统整体进行功能、服务规划。在交付过程中,从工程实践出发,组织好代码结构、配置、测试、部署、运维、监控的整个过程,从而有效体现微服务的独立性与可部署性。为了与高速公路建设投资总公司的现有信息系统架构无缝连接,本系统采用微服务技术架构来实现。2.架构设计2.1.思维设计微服务架构设计的根本目的是实现价值交付,系统遵循DevOps的开发理念。实现微服务技术架构,系统在技术上的要求以及相关配套服务的实现,主要包括如下:一、技术上要求:1.前后端分离,web前端通过Http/Https协议调用微服务的API网关,由API网关再经过路由服务调用相应的微服务。2.不同微服务之间通过REST方式互相调用。3.微服务之间通过消息中间件实现消息交互机制。二、配套服务与功能实现:1.需要进行相应的自动化服务实现,包括自动化构建、自动化安装部署、自动化测试、自动化平台发布(Docker实现)。2.管理服务,对于微服务架构,必须配套相应的监控与管理服务、日志管理服务等。3.协作服务,运用DevOps思想提升开发、测试、运维的高效沟通与协作,实现开发与运维的一体化。2.2.系统架构设计我们将整个系统根据业务拆分成若干个子系统或微服务。每个子系统可以部署多个应用,多个应用之间使用负载均衡。需要一个服务注册中心Eureka,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。Eureka可部署多个,进行高可用保证。所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置ZUUL网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候使用负载均衡Ribbon。服务之间采用feign进行调用。使用断路器hystrix,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。需要将产品功能拆分为较小的微服务,以便更好地管理和维护。2、单一职责:每个微服务应该只负责一个特定的功能,避免功能耦合。3、可独立部署:每个微服务应该可以独立部署,避免对其他微服务产生影响。4、可扩展性:每个微服务应该可以根据需要进行水平扩展,以满足不同的负载需求。5、易于测试:每个微服务应该可以单独进行测试,以便更好地发现和解决问题。6、可重用性:每个微服务应该可以被其他服务重复使用,以提高开发效率和代码复用率。7、高内聚低耦合:每个微服务应该具有高内聚性,避免功能重复和冗余,同时保持低耦合性,避免对其他服务产生影响。根据业务功能划分服务粒度,总的原则是保持服务内部高内聚,服务之间低耦合。这有助于提高系统的可维护性和可扩展性。每个服务只承担一个责任,即单一职责原则。这样可以确保服务的功能清晰,易于维护和测试。每个服务相互隔离,且不互相影响,这是隔离性原则。这有助于避免服务之间的冲突和故障,提高系统的可靠性。基础服务是一些基础组件,与具体的业务无关,例如短信服务和邮件服务。这些服务最容易划分为微服务,也是我们第一优先级分离出来的服务,这是业务无关优先原则。为实现负载均衡,允许相同的服务在多个节点注册相同的服务名,不同的端口。为避免消费者调用服务时产生混乱,需要进行服务名的统一规划。规划期统一制定每个服务提供者的服务名或者模块标示,并采用命名规则:ModuleName_ServiceName,且所有字符小写,不同单词之间以下划线分隔。新增服务名时,需要提出申请,审批通过后方可使用。不同的微服务需进行物理隔离。编译策略是代码编译时,各个微服务独立编译、打包,杜绝直接的依赖;工程构建是代码开发时,各微服务创建独立的工程,工程之间不能产生直接依赖;持续集成是每个微服务独立执行持续集成。每个微服务都有自己独立的数据库,这会导致后台管理的联合查询非常困难。目前通用有四种处理方案:严格按照微服务的划分来做,将业务高度相关的表放到一个库中,将业务关系不是很紧密的表严格按照微服务模式来拆分,MySQL+MHA高可用架构、MySQL分布式Proxy水平扩展架构、MySQL缓存高并发读架构、MySQL小文件系统大字段存取架构、MySQLInforbright/Greenplum统计分析架构。数据库按照微服务的要求进行切分,以满足业务高并发需求。同时,为了实现实时或准实时数据同步,我们将各微服务数据库数据同步到NoSQL数据库中,并在同步的过程中进行数据清洗。推荐使用MongoDB、HBase等NoSQL数据库来满足后台业务系统的使用。为了满足系统的实际需求,我们采用了软负载均衡(SoftLoadBalancing)或者客户端负载均衡的方案,而不再采用一般的增加负载均衡服务器的方式进行负载均衡,如F5、Nginx、LVS等。在SpringCloud中,我们可以配合Eureka的服务注册功能,使用Ribbon子项目来实现REST客户端的负载均衡。使用Ribbon进行负载均衡,其工作原理可以概括为以下四个步骤:首先,Ribbon根据其所在Zone优先选择一个负载较少的EurekaServer;然后,定期从EurekaServer更新并过滤服务实例列表;接着,根据指定的负载均衡策略,从可用的服务器列表中选择一个服务实例的地址;最后,通过RestClient进行服务调用。Ribbon本身提供了多种负载均衡策略,如轮询策略、随机选择策略、最大可用策略和带有加权的轮询策略等。我们可以根据实际情况来选择适合的负载均衡策略。例如,RoundRobinRule是默认的轮询策略,而RandomRule是随机选择策略。另外,BestAvailableRule是最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;而WeightedResponseTimeRule是带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后采用轮询的方式来获取相应的服务器。AvailabilityFilteringRule是一种可用过滤策略,它先过滤出故障的或并发请求大于阈值的一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选出一个。而ZoneAvoidanceRule是一种区域感知策略,它先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例。在性能策略方面,需要进行网络优化和配置优化。网络优化方面,可以优化组网结构,提升网络间通讯性能。配置优化方面,可以优化SpringCloud组件集以及其他组件的配置信息,使得性能最大化。在开发阶段,所有服务通过Zuul网关进行调用,不允许直接调用微服务提供者。Zuul可能会成为系统瓶颈,复杂时可考虑为Zuul进行主备或负载均衡处理。采用HTTPREST方式进行调用,针对业务需求可以进行负载均衡,负载均衡的调用方式有两种:FeignClient和RestTemplate。系统使用FeignClient方式进行服务调用。无论是哪种方式,都是通过REST接口调用服务的http接口,参数和结果默认都是通过Jackson序列化和反序列化。因为SpringMVC的RestController定义的接口,返回的数据都是通过Jackson序列化成JSON数据。系统采用RabbitMQ消息中间件来实现异步调用。RabbitMQ即一个消息队列,主要用于实现应用程序的异步和解耦,同时也能起到消息缓冲和消息分发的作用。系统中的API接口都需要某种授权才能访问,登录成功后,会设置cookie或headertoken等。然后客户端接下来的请求就会带着这些验证信息,从Zuul网关传到相应的服务上进行验证。最后,服务编排是指将多个服务组合在一起,形成一个整体应用。服务编排可以通过DockerCompose来实现。DockerCompose是一个用于定义和运行多个Docker容器的工具。主要的作用是减少项目中微服务之间的相互依赖。这可以通过服务编排来实现,即在一个核心的业务处理项目中,负责与各个微服务进行交互。例如,之前是a调用b,b调用c,c调用d,现在可以将这些操作统一在一个核心项目W中进行处理,W服务使用a时会调用b,使用b时会调用c。这种设计可以理解为面向对象的思想,通过减少方法之间的嵌套调用,采用一个方法来串联业务流程。例如,方法W实现了一个完整的业务处理,可以通过以下方式实现:functionw(){1.调用方法a;2.调用方法b;3.调用方法c;}4.2.服务熔断处理在微服务之间进行调用时,由于各种原因可能会导致远程服务不可用或过载等异常,这时需要一种机制来进行保护处理。系统可以通过Netflix的Hystrix组件实现熔断和降级处理来解决这个问题。断路器是一种设施,可以在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)。Netflix的Hystrix组件提供了断路器、资源隔离和自我修复功能。4.3.统一日志管理不同的微服务部署在不同的节点上,登录每个节点查看日志比较麻烦。同时,需要关联多个微服务日志联合查看分析的情况也会更加麻烦。随着节点数量的增加,如果没有适当的管理机制和工具,定位和发现问题的复杂性将会指数级增长。因此,需要进行统一的日志管理。实现方法如下:1.建立统一的日志管理规范;2.开发并使用统一的日志组件,为所有微服务提供统一的日志服务,由slf4j封装;3.在每个服务节点上部署日志采集Agent组件,由此Agent进行日志的采集与转发;4.建立统一的日志中心,所有日志写入日志中心。4.4.统一监控管理使用Hystrix组件进行服务的监控,使用Nagios进行服务器等资源的监控。具体实现如下:1.Hystrix,监控和断路器。只需在服务接口上添加Hystrix标签即可实现对该接口的监控和断路器功能。2.HystrixDashboard,监控面板。提供一个界面,可以监控各个服务上的服务调用所消耗的时间等。3.Turbine,监控聚合。使用Hystrix监控时,需要打开每个服务实例的监控信息来查看。而Turbine可以将所有服务实例的监控信息聚合到一个地方统一查看,这样就不需要挨个打开页面查看。4.5统一配置管理为了实现各微服务的统一参数配置以及版本管理,我们采用了SpringCloudConfig配置中心。SpringCloudConfig就是通常意义上的配置中心,它可以把应用原本放在本地文件的配置抽取出来放在中心服务器,从而提供更好的管理和发布能力。SpringCloudConfig分为服务端和客户端,服务端负责将存储在git中的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但是客户端并不能主动感知到配置的变化,从而主动去获取新的配置。为了解决这个问题,我们采用了消息总线的方案:1.Git仓库、ConfigServer、以及微服务“ServiceA”、“ServiceB”的实例中都引入了SpringCloudBus,所以他们都连接到了RabbitMQ的消息总线上。2.从Git仓库中配置的修改到发起/bus/refresh的POST

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论