热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Python自建分布式高并发RPC服务

RPC(RemoteProcedureCall)服务,即远程过程调用,在互联网企业技术架构中占据了举足轻重的地位,尤其在当下微服务化逐步成为大中型分布式系统架构的主流背景下,RP

RPC(Remote Procedure Call)服务,即远程过程调用,在互联网企业技术架构中占据了举足轻重的地位,尤其在当下微服务化逐步成为大中型分布式系统架构的主流背景下,RPC 更扮演了重要角色。Google 开源了 gRPC,Facebook 开源了 Thrift,百度开源了 bRPC,腾讯开源了 Tars,阿里开源了 Dubbo 和 HSF,一线互联网大厂们纷纷亮出自己研制的 RPC 框架武器,解决分布式高并发业务问题。

高深复杂的 RPC 框架解决了哪些业务难题?其技术含量究竟高在哪里?后端开发者该如何深入掌握 RPC 开发?

虽然大部分后端开发者在日常开发中都会隐式或显式的使用 RPC,但对初级开发者来说 RPC 总是略显神秘而有距离,而即便有多年 RPC 使用经验的程序员,也可能依然对 RPC 背后的原理不甚了解,难以精通,遇到复杂问题时难免误用。

RPC 本身理论繁杂,涉及的技术栈和工具也比较多,能将理论落实到代码层面,并结合业务实际情况,避开各种坑,最终实现性能和工程上的极致优化,这对后端开发者来说是一个极大的挑战。而对 RPC 服务开发原理的认知水平,也正是区分后端高级开发者和普通开发者的重要参考标准之一。在分布式高并发服务领域,只有高手才能担当重任,在业务工程领域有创新建树。


程序员的成长层级

640?wx_fmt=png

作为一名面试官,身边不少工程师会经常问我如何判断一个程序员的技术水平,如何区分他是高级的资深的,还是普通的一般的。相信每个面试官都有自己的一套判断标准和参考答案,但通常最重要的一个评判依据是:

  • 高级程序员在技术选择的自由度上往往更大,他们不只会用,而且还知道为什么要这么用,能不能不这么用,有没有更好的办法。

  • 初级程序员只会搬砖,看到别人怎么写我就怎么写,缺乏自主思考的能力。

初级程序员之所以创新能力不足,根本原因在于没有系统深入的掌握技术背后的基础原理,无法进行有效思考,所谓“浮沙之上,难筑高台”。只有在深入理解技术原理之后,工程能力才可能突飞猛进提升。

不想造轮子的程序员成为不了技术专家


软件工程领域有一句很经典的名言「不要重复造轮子」,这句话旨在指导软件工程以低成本高效开发。不过它也有适用范围,因为程序员平时学习使用的所有开源框架和编程语言,本质上都是「新轮子」。如果全世界的程序员都完全信奉这句名言,那今天就只有一种编程语言,一种 Web框架,这样的世界是令人难以想象的。从这个角度看,不断造「新轮子、好轮子」才是计算机科学的演进历史,也构建了现代软件工程的基石。


虽然大多数新轮子最终不会被很多人使用,但是「造轮子」无疑是深入理解技术原理的最佳方法。不会造轮子的同学永远只能停在技术表层,难以进行有创造性的工作。在造轮子的初级阶段,确实应该避免将自己的轮子直接应用在公司业务系统中带来维护成本问题,但是到了高级阶段,造轮子的能力就是开发者的核心竞争力,而轮子也将成为公司之间差异化竞争的重要资本。也可以说,要想成为中大型互联网公司的高级工程师或技术专家,必须具备通过造轮子开发出更好工具的实战能力。

说了这么多,就是为了推荐一本小册给大家,通过实战模块教大家打造一个属于自己的小轮子 —— RPC 服务小框架,带领大家体验这种深度学习方法的价值。这里也引用理论物理大师费曼先生的名言与诸位同学共勉。

640?wx_fmt=png

                                  

为什么会有这本小册?

这是作者在技术写作领域完成的第一本主题小册。内容不多,却浓缩了这十年来工作学习修来的精华。“授人以鱼不若授人以渔”,“磨刀不误砍柴工”。希望阅读这本小册,既能让你收获很多构建分布式系统的方法和技巧,也能收获实用的方法论和思考方式,让你能码的更快码的更好,快速进入高手行列。


本小册的内容设计和特点


网络上讲解 RPC 的文章也有不少,但相对来说都比较散乱或不够深入,对 RPC 服务器的实现往往都是蜻蜓点水,浅尝辄止,在基础原理上的讲解也多流于表面,不及内核本质。

本小册内容不会对那些网上博客文章常见的浅层内容做过多重复讲解,而将写作重心放在作者从多年实战经验中摸索出来的更有深度、极为重要或多数人未曾深入的诸多知识点上,期望带领读者同时从深度和广度上充分理解 RPC 服务架构的深度内核设计原理和实现细节,并会拓展介绍一些 RPC 相关的协议开发知识和业界实战框架介绍,作为进阶选修参考。

这本小册在内容结构上主要划分为 6 大块:

640?wx_fmt=png

  1. 基础篇:RPC 在企业技术中的地位、应用场景、基础原理和交互流程

  2. 进阶篇:RPC 通讯协议原理、流行协议解构和实例代码分析

  3. 高级篇:RPC 客户端的实现要点

  4. 实战基础篇:RPC 服务器多种并发模型实例讲解

  5. 实战高级篇:分布式 RPC 服务实战(代码实例)

  6. 拓展学习篇:开源框架 gPRC/Thrift 原理入门与实践


为什么选择 Python 语言实现?

虽然在超大型企业内部很少使用 Python 来打造 RPC 服务,他们多半会使用 Java 或者 Golang 开发,因为 RPC 服务对性能有非常极致的要求。但是考虑到本小册的核心目标是让大家深入理解 RPC 背后的原理,而 Python 语言更加适合入门,实现代码比较简短,更利于阅读学习,尤其是对初、中级开发者更为友好。另外,还有些服务器并发模型是 Java 和 Golang 都不具备而 Python 独有的,选择 Python 语言 可以使得内容更加丰富多彩。所以,基于教学目的,本小册最终选择了 Python 作为 RPC 框架实现语言。相信这并不会妨碍真正有志于分布式高并发领域的后端开发者从中获取对 RPC 的理解和实战开发经验。


作者介绍

钱文品(老钱),互联网分布式高并发技术十年老兵,知乎专栏「码洞」资深洞主,掘金技术专栏作者,目前任掌阅科技资深后端工程师,曾服务于人人网,果壳。熟练使用 Java、Python、Golang 等多种计算机语言,开发过游戏制作过网站,写过消息推送系统和MySQL 中间件,实现过开源的 ORM 框架、Web 框架、RPC 框架等。Github 地址: github.com/pyloque


名人推荐


掌阅科技技术总监「陈超」

640?wx_fmt=png

RPC服务主要用来满足企业业务系统发展到一定程度后,对于服务调用效率的提升要求。虽然业内有比较成熟的框架gRPC, Thrift等可用,但作为稍有追求的开发者来说,通晓细节和原理比仅仅会用更为重要,该小册采用Python语言由浅入深,并结合实例详细讲解了RPC相关的原理知识以及常用模型,推荐给想真正了解并应用RPC服务解决实际问题的小伙伴们!


适宜人群


  1. 掌握Python 语法基础,有至少1-2年后端开发经验,想系统深入的掌握 RPC服务开发;

  2. 不满足于只埋头搞业务的普通开发者和 CRUD 熟手;

  3. 期待持续进阶的 Python、Java、Golang 中高级程序员;

  4. 有志于向架构师方向迈进的 Geek 们;

  5. 渴望逃离技术舒适区的造轮子爱好者们;


读者福利


作者决定拿出一部分自己收藏的好书作为福利,以抽奖的形式免费赠予购买小册的用户(国内用户包邮),数量有限,大家就拼人品吧(购买小册后会拉入一个读者交流群进行抽奖)

  1. 《C Primer Plus》

  2. 《动手玩转 Arduino》

  3. 《白帽子讲 Web 安全》

  4. 《深入理解程序设计——使用 Linux 汇编语言》

  5. 《图解服务器网络架构》

  6. 《构建 Oracle 高可用环境》 除了以上 6 本外,还有很多其它的好书,这里就不一一列举了。


最后如果你有兴趣,可以通过长按下方的二维码,享受5折优惠购买,花不到10块钱把 RPC 搞懂

640?wx_fmt=png

另外,我还争取了5个免费阅读码,将在留言区发送,按照评论的先后顺序发送给 01、10、101、111、1000 楼,所以你不仅要手快,还要运气好。有读者可能要问,能盖那么多楼层吗?我觉得可以,因为我们使用的二进制。


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
author-avatar
laomeng爱家人_465
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有