前言
大家好,先做一下自我介绍
我叫Barry Yan,目前是一名互联网公司的研发工程师,同时也是后端技术领域的狂热爱好者和技术博主,在GitHub、CSDN社区、51CTO博客社区、阿里云技术社区、掘金技术社区和InfoQ写作社区等都有自己的博客,原创200余篇。虽然刚刚大学本科毕业不到一年,但是算上实习经历的话大概有一年多的工作经验了,并且接触了一些不同的的编程语言和技术栈,对Java语言和相关技术栈如Spring、Tomcat、Netty、Zookeeper,Go语言和相关技术栈如Docker、gRPC、Gin、etcd都可以说比较熟悉。
为什么要写这个专栏。
在Go语言的相关学习中,发现确实如一些网友所说,Go相比Java,语言生态方面还是有一定的弱势的,因此相关技术栈的学习资料、对解决问题的经验分享等内容在互联网上相比Java都不是特别的多,而我本人则是更偏向于做一个内容生产者,写出优质的内容丰富社区,并且能让更多的人去了解,同时也能丰富自己,让自己对这一门技术理解的更加深刻,所以就想在业余休息的时间,从Go语言开发中非常常见的gRPC框架入手,完成一套属于自己的专栏!这个选择是经过深思熟虑的,我相信自己在创作专栏的过程中能够有一些不同的成长,能够让读者朋友有实实在在的收获,让社区多一些更好的内容。
我们为什么要学习gRPC?
当今的无论是传统软件领域还是互联网领域,各种新技术层出不穷,覆盖的用户量规模也越来越广泛,随之而来的是架构思想的不断转变,从单体架构到SOA,到微服务再到"无服务",分布式技术越发常见且重要,而自从单体架构之后的分布式架构,都会设计到服务之间的信息传输,而信息传输的方式主要是通过网络,更详细一点是TCP网络协议,但是应用之间很少会直接使用TCP协议进行传输,而是选择更上层的网络协议,比如HTTP、Socket、RPC等等,因为越往上层就意味着封装了更多的抽象,便于开发人员对其进行使用,而PRC相关的框架,无论是在性能上还是便捷性上都是服务到服务之前进行信息传输的最优选项,而gRPC框架则是所有RPC框架中各方面最为突出的框架之一。
gRPC是Google发布的基于HTTP2.0协议的高性能开源RPC框架,是一种可拓展、松耦合且类型安全的解决方案,与传统的基于HTTP的通信相比,它能进行更有效的进程间通信,特别是现在流行的微服务架构和云原生技术里,在很多框架里都能看到它的身影存在,并且提供了多种编程语言的支持。本篇专栏,从最简单的Hello World程序开始,从认识到应用,从编写程序到剖析源码,从全局到细节,和大家一起去掌握gRPC。
学习专栏前最好要具备一些基础知识:
- Go、Java语言的编程基础
- 计算机网络知识
- Git工具的使用
专栏目录
专栏除了开篇词和结束语以外总共分为四个部分,分别是基础篇、实践篇、高级篇和扩展篇:
基础篇
在基础篇的文章中,我会从计算机网络中的TCP协议开始,讲述RPC协议和相关框架实现的演进过程,分析RPC为什么一定会出现,并且了解gRPC是怎样的RPC框架和gRPC的一些特性,从宏观的角度去了解gRPC框架在具体使用中的通信过程,能够让我们了解gRPC的基本概念和适用的场景。
实践篇
了解gRPC框架的基本情况之后,我们从实践出发,对gRPC进行进一步的使用,并且引入etcd服务注册中心,了解gRPC在分布式微服务领域的应用,还要从获取连接、负载均衡、异步处理、并发、安全、可用性等多个方面去了解gRPC的部分原理和源码,学习完这一篇之后相信大家就可以在项目中灵活的使用gRPC框架,并且能够处理大部分的问题。
高级篇
在这一篇中,我会尝试带你深入gRPC原理和几个性能优化的要点,回归网络去了解HTTP2.0,以及不常用但是也很重要的UnknownService机制,最后尝试去实现我们自己的RPC框架,在这一篇的学习中,我们可以对gRPC进行更加深入的掌握,在项目中的使用和优化能够游刃有余。
扩展篇
扩展篇的几篇文章,能够为我们带来实践经验、源码、思考和相关联组件的多方位知识,了解和实践不同语言的项目中使用gRPC,分享一下gRPC源码中的一些优雅设计和一些在实际使用过程中所遇到的一些问题和解决方式,讨论gRPC有哪些优势和不足,这些往往能够提升我们深度思考的能力。
最后
《玩转gRPC框架》这篇专栏可以说是我技术成长之路上的第一个专栏,在写作的同时也是在学习,作为一名技术人,面对写作这件事我认为最重要的就是热爱,而我也在保持热爱。在业余的时间里能够保持一个自己的爱好并坚持下去,对我们每一名技术人的成长也都是非常有帮助的。或许相比一线经验丰富的前辈来讲,我对gRPC这项技术的掌握并不是十分到位,对它的分析和理解也不是十分的深刻,写出的博客也可能不是十分的行云流水,但是我仍然热爱,仍然想做,仍然能够去做,并且能在自己的能力范围之内做到最好,就没有什么可怀疑的了。
最后,我想谨以此专栏由衷的感谢在我成长过程中遇到的每一位老师的教导与帮助,同时也感谢每一位读者的支持!