云架构师进阶攻略(3)


此文已由做者刘超受权网易云社区发布。html

欢迎访问网易云社区,了解更多网易技术产品运营经验。web



10、基于Hadoop和Spark了解大数据平台算法

对于数据架构的部分,其实经历了三个过程,分别是Hadoop Map-Reduce 1.0,基于Yarn的Map-Reduce 2.0, 还有Spark。数据库

以下图是Map-Reduce 1.0的过程。后端

 

             

Map-Reduce的过程将一个大任务,split称为多个Map Task,分散到多台机器并行处理,将处理的结果保存到本地,第二个阶段,Reduce Task将中间结果拷贝过来,将结果集中处理,取得最终结果。缓存

在Map-Reduce 1.0的时候,跑任务的方式只有这一种,为了应对复杂的场景,将任务的调度和资源的调度分红两层。其中资源的调用由Yarn进行,Yarn无论是Map仍是Reduce,只要向他请求,他就找到空闲的资源分配给他。网络

每一个任务启动的时候,专门启动一个Application Master,管理任务的调度,他是知道Map和Reduce的。这就是Map-Reduce 2.0以下图。架构

 

             

这里Yarn至关于外包公司的老板,全部的员工都是worker,都是他的资源,外包公司的老板是不清楚接的每个项目的。并发

Application Master至关于接的每一个项目的项目经理,他是知道项目的具体状况的,他在执行项目的时候,若是须要员工干活,须要向外包公司老板申请。负载均衡

Yarn是个通用的调度平台,可以跑Map-Reduce 2,就能跑Spark。

Spark也是建立Spark本身的Application Master,用于调度任务。

Spark之因此比较快,是由于前期规划作的好,不是像Map-Reduce同样,每一次分配任务和聚合任务都要写一次硬盘,而是将任务分红多个阶段,将全部在一个Map都作了的合成一个阶段,这样中间不用落盘,可是到了须要合并的地方,仍是须要落盘的。

对于Hadoop和Spark的基本原理,我写了下面的文章。

通俗说基于Yarn的Map-Reduce过程

通俗说Spark

 

真正写Map-Reduce程序的时候,有不少的方法论,这里我总结了几个,供您参考。

大数据方法论之优化Map-Reduce过程

大数据方法论之网页消重的Map-Reduce算法

大数据方法论之PageRank的Map-Reduce计算

大数据方法论之Nutch基于Map-Reduce的爬取方法

 

11、基于Lucene和ElasticSearch了解搜索引擎

             

当大数据将收集好的数据处理完毕以后,通常会保存在两个地方,一个是正向索引,能够用Hbase,Cassandra等文档存储,一个是反向索引,方便搜索,就会保存在基于Lucene的ElasticSearch里面。

对于Lucene,在职业生涯的早期,写过一个《Lucene 原理与代码分析完整版》有500多页。

对于搜索引擎的通用原理,写了下面的文章。

不是技术也能看懂搜索引擎

搜索引擎的设计(1):词典的设计

搜索引擎的设计(2):倒排表的设计上

搜索引擎的设计(3):倒排表的设计下

 

12、基于SpringCloud了解微服务

 

最后到了应用架构,也即微服务。

             

接下来细说微服务架构设计中不得不知的十大要点。

设计要点一:负载均衡 + API 网关

             

在实施微服务的过程当中,难免要面临服务的聚合与拆分。

当后端服务的拆分相对比较频繁的时候,做为手机 App 来说,每每须要一个统一的入口,将不一样的请求路由到不一样的服务,不管后面如何拆分与聚合,对于手机端来说都是透明的。

有了 API 网关之后,简单的数据聚合能够在网关层完成,这样就不用在手机 App 端完成,从而手机 App 耗电量较小,用户体验较好。

有了统一的 API 网关,还能够进行统一的认证和鉴权,尽管服务之间的相互调用比较复杂,接口也会比较多。

API 网关每每只暴露必须的对外接口,而且对接口进行统一的认证和鉴权,使得内部的服务相互访问的时候,不用再进行认证和鉴权,效率会比较高。

有了统一的 API 网关,能够在这一层设定必定的策略,进行 A/B 测试,蓝绿发布,预发环境导流等等。

API 网关每每是无状态的,能够横向扩展,从而不会成为性能瓶颈。


设计要点二:无状态化与独立有状态集群

        

 

影响应用迁移和横向扩展的重要因素就是应用的状态。无状态服务,是要把这个状态往外移,将 Session 数据,文件数据,结构化数据保存在后端统一的存储中,从而应用仅仅包含商务逻辑。

状态是不可避免的,例如 ZooKeeper,DB,Cache 等,把这些全部有状态的东西收敛在一个很是集中的集群里面。

整个业务就分两部分,一个是无状态的部分,一个是有状态的部分。

无状态的部分能实现两点:

·      跨机房随意地部署,也即迁移性。

·      弹性伸缩,很容易地进行扩容。

 

有状态的部分,如 ZooKeeper,DB,Cache 有本身的高可用机制,要利用到它们本身高可用的机制来实现这个状态的集群。

虽然说无状态化,可是当前处理的数据,仍是会在内存里面的,当前的进程挂掉数据,确定也是有一部分丢失的。

为了实现这一点,服务要有重试的机制,接口要有幂等的机制,经过服务发现机制,从新调用一次后端服务的另外一个实例就能够了。

 

设计要点三:数据库的横向扩展

 

             

数据库是保存状态,是最重要的也是最容易出现瓶颈的。有了分布式数据库可使数据库的性能随着节点增长线性地增长。

分布式数据库最最下面是 RDS,是主备的,经过 MySQL 的内核开发能力,咱们可以实现主备切换数据零丢失。

因此数据落在这个 RDS 里面,是很是放心的,哪怕是挂了一个节点,切换完了之后,你的数据也是不会丢的。

再往上就是横向怎么承载大的吞吐量的问题,上面有一个负载均衡 NLB,用  LVS,HAProxy,Keepalived,下面接了一层 Query Server。

Query Server 是能够根据监控数据进行横向扩展的,若是出现了故障,能够随时进行替换的修复,对于业务层是没有任何感知的。

另一个就是双机房的部署,DDB 开发了一个数据运河 NDC 的组件,可使得不一样的 DDB 之间在不一样的机房里面进行同步。

这时候不但在一个数据中内心面是分布式的,在多个数据中内心面也会有一个相似双活的一个备份,高可用性有很是好的保证。

 

设计要点四:缓存

 

             

在高并发场景下缓存是很是重要的。要有层次的缓存,使得数据尽可能靠近用户。数据越靠近用户能承载的并发量也越大,响应时间越短。

在手机客户端 App 上就应该有一层缓存,不是全部的数据都每时每刻从后端拿,而是只拿重要的,关键的,时常变化的数据。

尤为对于静态数据,能够过一段时间去取一次,并且也不必到数据中心去取,能够经过 CDN,将数据缓存在距离客户端最近的节点上,进行就近下载。

有时候 CDN 里面没有,仍是要回到数据中心去下载,称为回源,在数据中心的最外层,咱们称为接入层,能够设置一层缓存,将大部分的请求拦截,从而不会对后台的数据库形成压力。

若是是动态数据,仍是须要访问应用,经过应用中的商务逻辑生成,或者去数据库读取,为了减轻数据库的压力,应用可使用本地的缓存,也可使用分布式缓存。

如 Memcached 或者 Redis,使得大部分请求读取缓存便可,没必要访问数据库。

固然动态数据还能够作必定的静态化,也即降级成静态数据,从而减小后端的压力。

 

设计要点五:服务拆分与服务发现

             

当系统扛不住,应用变化快的时候,每每要考虑将比较大的服务拆分为一系列小的服务。

这样第一个好处就是开发比较独立,当很是多的人在维护同一个代码仓库的时候,每每对代码的修改就会相互影响。

经常会出现我没改什么测试就不经过了,并且代码提交的时候,常常会出现冲突,须要进行代码合并,大大下降了开发的效率。

另外一个好处就是上线独立,物流模块对接了一家新的快递公司,须要连同下单一块儿上线,这是很是不合理的行为。

我没改还要我重启,我没改还让我发布,我没改还要我开会,都是应该拆分的时机。

再就是高并发时段的扩容,每每只有最关键的下单和支付流程是核心,只要将关键的交易链路进行扩容便可,若是这时候附带不少其余的服务,扩容既是不经济的,也是颇有风险的。

另外的容灾和降级,在大促的时候,可能须要牺牲一部分的边角功能,可是若是全部的代码耦合在一块儿,很难将边角的部分功能进行降级。

固然拆分完毕之后,应用之间的关系就更加复杂了,于是须要服务发现的机制,来管理应用相互的关系,实现自动的修复,自动的关联,自动的负载均衡,自动的容错切换。

 

设计要点六:服务编排与弹性伸缩

             

当服务拆分了,进程就会很是的多,于是须要服务编排来管理服务之间的依赖关系,以及将服务的部署代码化,也就是咱们常说的基础设施即代码。

这样对于服务的发布,更新,回滚,扩容,缩容,均可以经过修改编排文件来实现,从而增长了可追溯性,易管理性,和自动化的能力。

既然编排文件也能够用代码仓库进行管理,就能够实现一百个服务中,更新其中五个服务,只要修改编排文件中的五个服务的配置就能够。

当编排文件提交的时候,代码仓库自动触发自动部署升级脚本,从而更新线上的环境。

当发现新的环境有问题时,固然但愿将这五个服务原子性地回滚,若是没有编排文件,须要人工记录此次升级了哪五个服务。

有了编排文件,只要在代码仓库里面 Revert,就回滚到上一个版本了。全部的操做在代码仓库里都是能够看到的。

 

设计要点七:统一配置中心

             

服务拆分之后,服务的数量很是多,若是全部的配置都以配置文件的方式放在应用本地的话,很是难以管理。

能够想象当有几百上千个进程中有一个配置出现了问题,是很难将它找出来的,于是须要有统一的配置中心,来管理全部的配置,进行统一的配置下发。

在微服务中,配置每每分为如下几类:

·      一类是几乎不变的配置,这种配置能够直接打在容器镜像里面。

·      第二类是启动时就会肯定的配置,这种配置每每经过环境变量,在容器启动的时候传进去。

·      第三类就是统一的配置,须要经过配置中心进行下发。例如在大促的状况下,有些功能须要降级,哪些功能能够降级,哪些功能不能降级,均可以在配置文件中统一配置。

 

设计要点八:统一日志中心

             

一样是进程数目很是多的时候,很难对成千上百个容器,一个一个登陆进去查看日志,因此须要统一的日志中心来收集日志。

为了使收集到的日志容易分析,对于日志的规范,须要有必定的要求,当全部的服务都遵照统一的日志规范的时候,在日志中心就能够对一个交易流程进行统一的追溯。

例如在最后的日志搜索引擎中,搜索交易号,就可以看到在哪一个过程出现了错误或者异常。

设计要点九:熔断,限流,降级

             

服务要有熔断,限流,降级的能力,当一个服务调用另外一个服务,出现超时的时候,应及时返回,而非阻塞在那个地方,从而影响其余用户的交易,能够返回默认的托底数据。

当一个服务发现被调用的服务,由于过于繁忙,线程池满,链接池满,或者老是出错,则应该及时熔断,防止由于下一个服务的错误或繁忙,致使本服务的不正常,从而逐渐往前传导,致使整个应用的雪崩。

当发现整个系统的确负载太高的时候,能够选择降级某些功能或某些调用,保证最重要的交易流程的经过,以及最重要的资源所有用于保证最核心的流程。

还有一种手段就是限流,当既设置了熔断策略,又设置了降级策略,经过全链路的压力测试,应该可以知道整个系统的支撑能力。

于是就须要制定限流策略,保证系统在测试过的支撑能力范围内进行服务,超出支撑能力范围的,可拒绝服务。

当你下单的时候,系统弹出对话框说 “系统忙,请重试”,并不表明系统挂了,而是说明系统是正常工做的,只不过限流策略起到了做用。

 

设计要点十:全方位的监控

 

             

当系统很是复杂的时候,要有统一的监控,主要有两个方面,一个是是否健康,一个是性能瓶颈在哪里。

当系统出现异常的时候,监控系统能够配合告警系统,及时地发现,通知,干预,从而保障系统的顺利运行

当压力测试的时候,每每会遭遇瓶颈,也须要有全方位的监控来找出瓶颈点,同时可以保留现场,从而能够追溯和分析,进行全方位的优化。

 

我会将微服务相关的文章更加细化的写出来。

微服务化之服务拆分与服务发现

微服务化之缓存的设计

微服务化之无状态化与容器化

微服务化的数据库设计与读写分离

微服务的接入层设计与动静资源隔离

微服务化的基石——持续集成

 

有关微服务和容器之间的结合,写了下面的文章。

为何 kubernetes 自然适合微服务

微服务化不一样阶段 Kubernetes 的不一样玩法

金融创新业务基于容器云的微服务化实践

深刻解读Service Mesh背后的技术细节

深刻解读Service Mesh的数据面Envoy

最后。

刘超 网易云技术架构部总监

长期致力于云计算开源技术的分享,布道和落地,将网易内部最佳实践服务客户与行业。

技术分享:出版《Lucene应用开发解密》,极客时间专栏《趣谈网络协议》,我的公众号《刘超的通俗云计算》文章Kubernetes及微服务系列18篇,Mesos系列30篇,KVM系列25篇,Openvswitch系列31篇,OpenStack系列24篇,Hadoop系列10篇。公众号文章《终于有人把云计算,大数据,人工智能讲明白了》累积10万+

大会布道:InfoQ架构师峰会明星讲师,做为邀请讲师在QCon,LC3,SACC,GIAC,CEUC,SoftCon,NJSD等超过10场大型技术峰会分享网易的最佳实践

行业落地:将网易的容器和微服务产品在银行,证券,物流,视频监控,智能制造等多个行业落地。


相关阅读:云架构师进阶攻略(2)

云架构师进阶攻略(1)


网易 云计算基础服务 深度整合了  IaaS 、 PaaS  及容器技术,提供弹性计算、 DevOps  工具链及微服务基础设施等服务,帮助企业解决  IT 、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台, 点击可免费试用 。    



相关文章:
【推荐】 iOS 安装包瘦身(下篇)
【推荐】 搜索凑单页大促显示延迟方案设计

相关文章
相关标签/搜索