前言

做一个好的开放平台有三方面的挑战,第一是来自稳定性挑战,每天数十亿的请求,有的来自商家、有的来自外部开发者,还有的来自外部合作伙伴平台,API请求的类型除了简单的Key-Value读写,还有多维度的写数据请求和复杂查询。怎么保证部分API服务出现问题不让整个网关系统受到影响?在流量洪峰到来的时刻怎么保证核心服务、核心请求的高可用?

第二来自开发者的体验挑战,这里的开发者包括提供API的开发者及使用APl的开发者,对于开发者的体验大家往往会忽略,但他们是开放平台的真实客户,决定开放平台的发展和未来。怎么让提供API的开发者更高效率地管理和发布API?怎么让使用API的开发者更方便、高效地利用API开发自己的应用,出现问题怎么调试?怎么自动化地发布管理应用?

第三来自安全的挑战,可以说这是一个最大的挑战。电商的数据是多维度的,包括商品管理、订单生产、售后客服处理、财务结算及各种营销管理,等等,基本每个场景都会涉及数据处理和授权。如何能在开放的同时保障用户的隐私信息、平台的商业数据等不被泄漏或滥用?而且还有个矛盾点在于数据越开放,平台就越繁荣,在这里需要做哪些技术上的安全保障和机制?这些问题直接关系开放平台是否还可以继续做下去!

以上这些技术挑战的解决方案,只有在工作实践中持续不断打磨才能迭代出来,作者在此文中将这些技术实践进行思考和总结,由浅入深地讲给大家,相信会给你带来更多的思考和收获。

目录

 

主要内容

本文内容共分为10章,带你深度解读IO多路复用技术、解读Tomcat中的NIO模型、解读一次RPC调用时间都去哪儿了、详述MQ各种功能场景等,这些内容都是经过实践得出的真知。

第1章网关之道讲述网关的前世今生,以及一个成熟的网关应该具备的能力;

我们需要一个网关,实现微服务之后需要一个统一的出入口来“统领”众多的微服务的接口。开放网关更是如此,它需要把企业组织的能力以API的形式对外赋能。这样网关便有了两个突出的特点,一是访问量大,二是依赖系统多,那么网关系统的稳定性和深度治理就显得尤为重要,读者可以结合容错之道一章的知识来应对这两个特点给网关系统带来的风险。本章从认识API网关开始,一直介绍到传统网关系统有几种“死”法,进而又介绍了全异步网关。本章对搭建网关的核心技术如泛化、管道、异步、缓存等都做了重点叙述,希望读者在搭建网关系统的时候可以作为参照。

 

第⒉章开放之道主要在网关的基础上围绕API展开介绍;

企业体量达到一定量级就会考虑对外开放的业务方向,这个量包含两个方面,一方面是访问量,另一方面是数据量。如果自己独享,那么业务的发展就会受到一定程度的约束,如果对外开放,将这个量下的业务和数据以API的形式开放给第三方,则会带来更大的业务发展,与第三方开发者共建一个开放的业务生态,形成API经济,带来更多的收益,达到双赢乃至多赢的目标。搭建开放平台要以开放网关为基础,提供沙箱环境,同时还需要做好开放安全的建设,开放和安全历来都是一对矛盾体,这一点需要企业认真去平衡。

 

第3章分布式之道重点介绍常见的事务、锁、限流场景下的知识;分布式系统的架构思想由来已久,互联网企业的系统架构一定是符合分布式的设计思想的。本章着重讲述了集群与分布式的区别、分布式系统下的事务、限流、锁,以及衡量一个系统的QPS、TPS等指标,另外还介绍了如何利用好这些指标。

 

第4章MQ之道从基础一直介绍到MQ的常用功能场景;消息中间件是互联网企业的必备基础组件之一,它可以给应用系统之间带来时间解耦、空间解耦。本章从认识JMS开始,逐步介绍了MQ的各种概念与原理,同时还详细叙述了MQ的各种功能场景的使用。单独一节介绍了MQ在数据异构中的作用,最后我们又回到概念与原理层面,思考了为什么需要消息过滤、消息重试的注意点、消息为什么没有了顺序等我们平时使用过程中容易忽略的一些知识。

 

第5章消息推送之道以HTTP和TCP的方式分别介绍生产系统中消息推送的实践;

消息推送是一种很经济的触达用户的通道或方式,无论APP应用,还是PC应用,企业的业务信息有时候是促销信息或公告之类的信息,它们都可以通过消息推送的方式送达用户。本章介绍了两种实现消息推送的技术,一种是基于HTTP的方式,另一种是基于Netty的TCP方式,读者可以拿来借鉴与参考。在实现消息推送后,我们还要关注服务器的性能,从最大支撑的连接数,到所使用的线程资源,都是需要我们考虑的。我们还介绍了弱网络的产生,以及与APNs的通信和实现方式。

 

第6章RPC之道着重从RPC 的底层原理去思考分析;

一套成熟的RPC框架在企业的整体系统架构中担负着中流砥柱的职责,无论我们做分布式系统,还是实现微服务化,都不能缺少对RPC的使用。本章我们首先认识RPC,然后介绍RPC实现的基础原理,随后又思考了一次RPC 的时间都耗费在哪些阶段,最后还介绍了异步RPC的知识。我们已经知道类似网关这样的纯IO型的应用,采取异步RPC调用会提高系统的性能。但目前大部分业务调用关系场景下还是采取同步调用RPC的居多,局部场景下我们仍然需要考虑是否可以采取异步的方式来实现更好的效果。

 

第7章IO之道深度解析多路复用技术和Tomcat中的NIO模型;

在“解读TO多路复用技术”一节中,我们已经对这种技术有了了解,当时也介绍了用户态和内核态。如果线程执行的是用户代码,那么当前线程处在用户态;如果线程执行内核里面的代码,那么当前线程处在内核态。更深层来讲,操作系统为代码所处的特权分了4个级别,不过现代操作系统只用到了0和3两个级别。0和3的切换就是用户态和内态的切换。

I/O复用模型是同步非阻塞,这里的非阻塞是指IO读写,对应的是recvfrom操作,因为数据报文已经准备好,不需要阻塞。说它是同步,是因为一次请求的执行是在一个线程里面。有时还会说它是阻塞的,实际上是指阻塞在Select 上面,必须等待读就绪、写就绪等网络事件!前面我们也了解了IO复用是多路复用,这里的多路是指多链接,每一个链接对应一个channel。或者说多路就是多个Channel。复用是指多个连接复用了一个线程或少量线程。

 

第8章微服务之道以我亲历的两个实践为案例介绍微服务是如何落地的;在本章中我们讲述微服务的知识并没有从“术”的维度去展开,比如Spring Cloud这样的实现框架,而是结合笔者自己的两个实践,一个是微服务后如何做一次系统拆分,另一个是如何朝着微服务的方向去做一次数据库拆分。在日常工作中除了开发新的系统,大多数情况下我们是要治理线上的生产系统,这些系统如何去微服务化呢?如果已经微服务化的如何做一次系统梳理来发现未知的问题呢?读者可以结合这两个案例分别从应用层和数据库层方面去思考。

 

第9章容错之道结合前面章节的知识重点讲述系统容错的常用方法,以及我所在公司在大促备战中常用的技术;

本章我们先后介绍了限流、线程池隔离、快速失败和熔断的一系列容错方法。细心的读者可能已经注意到,我们所讲的一些容错手段在有些场景下是基于同步调用的,那么可能会有疑问,为什么不使用异步调用呢?基本成熟的RPC都会支持异步调用,目前大家仍然广泛采用同步的方式主要有以下几个原因,首先同步调用已经可以满足绝大部分业务场景,其次异步的方式需要更关注内存的监控和顺序的问题,再者在编码习惯上同步调用更直接,不用添加诸如监听回调这样的方式,只有考虑到确实有需要异步场景的时候才会选用异步的方式,比如网关系统采用异步方式就会收到更好的效果,在网关之道章节中我们也介绍了异步的思想。

线上系统运行最重要的两个要素,一是要运行稳定,二是不能让局部影响全部。我们在工作中都是本着不去犯错的态度去建设线上系统的,但残酷的现实已经一次又一次地证明,线上频繁暴露出来的系统问题。因此我们要把很大一部分精力放到系统容错上面,也就是不允许局部问题影响整体。比如前面提到的一个系统中对某个外部依赖出了问题导致整个系统拒绝请求服务,这就是非常可怕的故障,而且一旦发生就是灾难性事故。本章介绍的这些容错措施可以有效地防止问题是无法杜绝的。比如早些年Netflix公司的线上系统的事件,以及近几年各大此类局部影响全部的事故的发生。

 

第10章程序之外,我结合自己的真实感受讲述健身锻炼跟程序之间的感悟,以及程序员的硬件装备等内容。

 

需要京东资深架构师在线分享的这份架构师修炼之道,核心技术修炼实践文档的朋友,可以转发此文关注小编👇👇👇

一线大牛对本文的高度评价

 

 

 

 

 

希望大家能够学以致用,把这些知识灵活的运用到实际的工作中去,努力提升自己技术深度和宽度,让自己变得更加有价值,对你未来也是一个大的跳跃。