net的微服务架构

net的微服务架构

眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一。微服务、DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能。特来电云平台,通过近两年多的实践,发现完全不像大家说的那样简单,大家是报喜不报忧,实在是水太深,谁做谁知道。今天就与大家分享一下在微服务架构+DevOps下,开发测试环境的一些运维痛点问题和解决方法。

架构的复杂度直接决定了运维的工作量,架构不是越复杂越好,而是适合最好。下面简单说说几种架构的优缺点。基于.net在搭建应用时,最常用的方法就是采用Asp.net MVC,前端、后端 All in到一个站点中,省时省力,完全不用关心部署运维的复杂度。但是弊端也非常明显,所有内容部署在一个站点下,如果业务复杂,系统的变化频率非常高,稳定性堪忧,基本无解。再复杂一些的就是前后端分离:H5(或Winform) + WebAPI,此种架构虽然把前后端的变化分开了,但是后端逻辑缺少复用,存在大量公共方法或者重复代码。更复杂的就是:前端+WebAPI+Service,这种模式下虽然抽取了公共服务,但是部署粒度还是很粗,基本上会按照业务范围分多集群部署。同一个集群下,部署的服务如果太多,程序集冲突、服务变更重启集群影响范围大等问题依旧是难解的问题。所以为了隔离变化、降低对其他服务的影响,集群的划分粒度会越来越小,甚至演变到一个服务一个集群,这就是微服务的形态了。这几种架构模式总结起来就是水平、垂直两个维度的变化,水平维度从一类站点变为了多类站点,以解决变化的影响访问、代码复用的问题。垂直维度从所有应用部署在一个站点中,变化到一个服务一个集群,隔离变化带来的影响。架构从一个点演变到两个维度的变化,最终带来的运维成本指数级的增长。下面是特来电云平台微服务架构图,从图中可以看出,整体架构比较复杂。

为了支持全国的充电业务,特来电云平目前已经有近千台服务器,应用程序100类+,WebAPI接口2000+,服务接口500+,开发测试环境几十个,仅仅生成环境每天热更新就会高达20次+。20多次的热更新,都必须经过单元测试后,部署到与生产环境近乎一致的测试环境中进行接口测试、UI测试,然后再在准生产环境中进行回归测试,最终才能灰度发布到两个数据中心。说到这里,大家很可能会想到通过DevOps来规范环境的同步:CI完成后,通过CD把产品更新部署到多个环境进行测试,然后发布到生产环境。是的,正常情况下,这个流程没问题,但是现实非常残酷。有太多的因素导致测试环境与生产不一致。下面就简单说说:

  1. .net Framework 无法采用Docker,更新包中不仅仅有程序文件的更新、还有配置的更新、SQL的更新。在如此大的规模下,人工更新成本高的离谱,基本上需要专岗来做。而人工做,很容易出错。必须工具化、自动化,补丁更新必须100%通过工具做,不能有人工干预,否则就会在各个环境中出现不一致的情况。
  2. 系统几乎每个小时都会发生一次变化,常见的增减应用程序、增减服务、增减WebAPI,这些信息的变化都会影响系统环境。只要一个程序、接口、服务管理不到位,系统就可能会给你颜色看。所有的机器信息、服务信息、配置信息必须集中管理维护,并在各类环境中实现自动同步。CMDB是必备的管理系统。
  3. 在日常的研发中,很多需求会涉及到多个产品研发部门联合开发,集成测试的周期很长,而测试环境的数量有限,经常出现一些紧急需求没有测试环境的尴尬问题。
  4. 测试环境会频繁的执行更新,甚至一个更新会反复多次,极易导致测试环境与生产环境不匹配。从而引起,程序热更新后存在bug,需要紧急回退。
  5. 开发测试环境是对每个开发人员开放的,每个人都会登录系统Debug。你懂的,只要Debug一次,程序很大几率就会发生变化。
  6. 一个业务可能需要几个、甚至十几个程序提供服务才能正常运行,一个环节出现问题,整个系统就会出错。如何快速的分析、排查问题,是个痛苦的问题。这是让很多人抓狂的问题。
  7. 。。。

在面对如此多的变化时,DevOps变的很理想、很无力。DevOps的落地,需要在不断的改良中找到平衡点。我们的解决方法是:

  • 搭建CMDB系统,管理各类环境的部署信息。比如:集群信息、进程信息、服务信息、WebAPI信息、配置信息等。并且这些信息的变更要通过系统集中管理,决不允许出现CMDB信息与部署信息不一致的情况。
  • 搭建补丁系统。开发交付包标准化管理。通过补丁制作工具,制作格式化的补丁,通过补丁安装平台,实现补丁包的安装。系统程序、SQL的变更全部通过补丁平台进行。补丁系统是一个非常复杂的系统,后续有机会再详细介绍。

  • 搭建模板机环境,当生产系统更新了补丁或者CMDB信息发生变化后,通过自动化的工具,主动推送到模板机中。保证生产环境与测试环境的实时同步。各类测试环境从模板机克隆,并通过工具与模板机定时同步变化。同步完成后,通过自动化测试工具和环境检查工具,确定环境是可用的。

  • 开发全链路监控系统,并在系统的各个入口处埋点,帮助开发人员分析系统问题。全链路监控系统也是一个非常复杂的系统,后续有机会再详细介绍。下面是全链路的基本原理图和运行效果图。

做互联网应用需要有基因,更需要有填坑的勇气和毅力,填坑的过程就是攀登技术高峰的过程,永无止境!本文也仅仅是从架构的方面给大家分享,不过内容全部已经落地,没有吹NB的意思。希望这个技术分享能对大家有用!

分类: 架构及扩展

时间: 2024-10-14 00:46:49

net的微服务架构的相关文章

用友iuap云运维平台支持基于K8s的微服务架构

什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大.更实际的问题.该架构强调的一些准则:单一职责.协议轻量.进程隔离.数据分离.独立部署.按需伸缩. 什么是Kubernetes? Kubernetes是Google开源的容器集群管理系统,其提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能:

微服务架构

互联网保险O2O平台微服务架构设计 关于架构,笔者认为并不是越复杂越好,而是相反,简单就是硬道理也提现在这里.这也是微服务能够流行的原因,看看市场上曾经出现的服务架构:EJB.SCA.Dubbo等等,都比微服务先进,都比微服务功能完善,但它们都没有微服务这么深入民心,就是因为他们过于复杂.简单就是高科技,苹果手机据说专门有个团队研究如何能让用户更加简单的操作.大公司都是由小公司发展起来的,如果小公司在开始技术选型时感觉某个框架费时费力就不会选择,而小公司发展到大公司的过程,一般也伴随着系统不断优

深解微服务架构:从过去,到未来|架构(2015-07-15)

随着用户需求个性化.产品生命周期变短,微服务架构是未来软件软件架构朝着灵活性.扩展性.伸缩性以及高可用性发展的必然方向.同时,以Docker为代表的容器虚拟化技术的盛行,将大大降低微服务实施的成本,为微服务落地以及大规模使用提供了坚实的基础和保障. 微服务的诞生   微服务架构(Microservice Architect)是一种架构模式,它提倡将单块架构的应用划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟

.NET Core 实践:微服务架构的优点

微服务现在已经是各种互联网应用首选的云架构组件,无论是 BAT 还是 滴滴.美团 ,微服务都是重要的一环. 相对于微服务,传统应用架构有以下缺点: 1. 业务代码混杂,团队成员职责边界不清,团队协作体验不佳,开发效率低下. 传统应用架构中,各个业务模块代码都存在于同一个应用当中,各个业务模块之间交互逻辑复杂,代码统统混在一起,难免出现要去别人代码里改代码的情况 2. 代码耦合度高,日趋臃肿,难以重构,维护成本越来越高. 感受过被F12支配的恐惧吗? 3. 容错能力弱,单点故障引发全局崩溃. 4.

Spring Cloud微服务架构在互联网中应用

夜行侠老师录制的:Spring Cloud微服务架构在互联网中应用 由大象分享网出版:http://www.itjoin.org/course/detail/5934a58c0cf2159b39641f80夜行侠课程集合:http://www.xuetuwuyou.com/user/29 第1节.Springcloud介绍第2节.Eureka的使用第3节.Eureka集群第4节.restful请求第5节.restful请求负载均衡第6节.配置中心第7节.获取配置中心数据第8节.配置中心高可用第9

微服务架构(Microservice Architecture)

之前一段时间,有听部门架构说起接下来公司要使用微服务架构来研发系统,当时没怎么在意,因为是第一次听说微服务这个名词(果然无知者无畏啊):正好赶上五一假, 我自告奋勇的,接了编写微服务架构培训文档这个任务(也许因为我是文科生,文笔稍微好点).五一假期三天,基本都是在看资料,梳理思路以及编写接下来的培训文档中度过. 下面,就说说我这几天的一些收获吧:先说说资料来源吧:有架构给我的一些资料,以及自己百度和论坛.社区找来的一些资料,权当做一个总结式的简介... 目录如下: 一.微服务架构介绍 二.出现和

微服务架构——不是免费的午餐

当我開始了解<微服务架构>的时候,我发现里面的中文文章是相当的少,于是開始试着翻译一些文章,比方这一篇<微服务--不是免费的午餐>.这篇文章是在某次讨论结束后听到的,和之前相似的是这样的差别有点相似于之前说的微内核与宏内核的差别. 译文例如以下: 文章是由Contino公司的CTO,Benjamin Wootton写的.Contino是一家在伦敦的咨询公司,专注于DevOps和持续支付. Microservices are a style of software architect

微服务架构的设计和实践-培训感悟

这两天(4月8号,9号)我有幸参加了极客邦的培训课程-微服务架构的设计和实践,能够面对面倾听58架构师-孙玄的亲身授课,个人也是感到非常的荣幸.两天的时间,来回于广州和深圳,虽然不能说自己的技术有了一个质的提升,但至少也是一次很好的交流体现,这一趟不白走! 身为一个技术小白(虽然个人也有四年的开发经验,但大多的技术只是知其然而不知其所以然,而且接触面太狭隘),此次学习最明显的感受是,如果你只会写软件代码,了解与某种语言相关的语法,框架以及架构包括技术,那你肯定会"死的很惨".作为软件行

微服务架构下的数据一致性:可靠事件模式

主页:http://www.howardliu.cn/ 博客:微服务架构下的数据一致性:可靠事件模式 在<微服务架构下的数据一致性:概念及相关模式>中介绍了在微服务中实现数据一致性的三种方式,包括可靠事件模式.业务补偿模式.TCC模式.本文重点说一下可靠事件投递. 1. 可靠事件模式 可靠事件模式属于事件驱动架构,微服务完成操作后向消息代理发布事件,关联的微服务从消息代理订阅到该事件从而完成相应的业务操作,关键在于可靠事件投递和避免事件重复消费. 可靠事件投递有两个特性:1)每个服务原子性的完

图解微服务架构演进

前言 来自dubbo的用户手册中的一句话:随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 常规的垂直应用架构就相当于传统的那种,现阶段传统垂直架构改造的核心就是对应用做服务化改造,服务话改造使用的核心技术架构就是分布式服务框架. 其实这篇是概念上的总结,技术概念软文,纪录此文让自己更明白什么是微服务化架构. 服务化架构演进 请看下图,也来自dubbo的用户手册,图中恰恰少了微服务架构的图.