2020年中小结

2020年中小结

自去年参加阿里中间件挑战赛之后,我开始接触rpc框架源码以及netty源码,rpc框架主要是看了motan和dubbo两个源码,当然也有了解其他的框架。Netty绝对可以算是我在计算机技术上帮我实现技术飞跃的一个框架,算是java这个不太贴近底层(尤其是web岗位)的语言和计算机底层的一个桥梁。Netty展示了如何使用JNI封装底层系统调用,让java不再局限于jvm的封装;Netty也展示了堆外内存的使用以及精细的内存管理算法;Netty当然还展示了epoll的封装以及reactor模型的美丽。这些是spring源码无法展示给你的,spring更多的是对Java各种设计模式的封装,并定义了一种规范的、简洁的开发范式,这和Netty这种追求性能、需要和计算机底层紧密结合的关注焦点是不一样的。

也正是因为Netty带给我的全新视野,让我认识到,学习计算机不应当局限在web的日常研发中,而是需要对计算机的原理做更加深入的研究。

去年还加入了一个开源项目组,做了一段时间,期间认识了一个写C/C++的朋友,在交流中我发现,不同的语言会给人不同的思考问题的角度。

仔细想想,不同的语言是有不同的哲学内涵的,当深入使用并理解一种语言之后,这种哲学内涵会贯穿一个人的思考方式,在思考不同问题的时候,也会不自觉的代入这种哲学内涵。拿java举例,java中所有东西都是类,类描述的是一群有共同特性的事物的集合,所以类内在的要求了封装、抽象、多态、以及继承。这其实很好理解,类需要屏蔽一些内部细节,并将这些事务的特征描述为各种方法提供给外界,所以需要封装;类描述的是一群事物的共同特征,所以需要这些共同特征进行抽象;一群事物中,不同的个体又有个性的差别或者派生,所以需要多态和继承。延伸开来,就形成了设计模式中所总结的几条准则:封装蕴含着知识最少原则和单一职责原则,抽象和继承蕴含着接口隔离原则和依赖倒置原则,多态蕴含着里式替换原则和开闭原则。我相信这么对应起来看是非常好理解的。再由这些原则,衍生出各种各样的常见的设计模式。所以从这条线可以梳理出java的研发模式,其实都是源自于java所谓”万物皆是类”这一核心哲学。

站在这一哲学思想上思考实际问题,就形成了一套使用Java语言的方法论。在思考问题的过程中,就会不自觉的把代码的内聚性、不同模块的解耦性、接口的扩展性作为设计的起点,这样设计出的代码,应该是各种方面符合java哲学的,当然,符合java的哲学不是目的,关键是看代码是否真的能够有效控制不同模块的解耦从而降低维护难度和重构成本,是否真的能够有清晰的接口抽象和内聚从而方便框架的扩展。当然,java哲学的正确性肯定是得到验证了的,按照这个方法设计出的框架结果肯定是符合要求的。

以这些知识为出发点,我写了一个自己的RPC框架,这个RPC框架不是用于自己的学习,而是真正的把工业生产环境作为设计目标而开发的一个RPC框架,去年下半年的整个业余时间几乎都耗在这里面了。

项目地址:https://github.com/catty-project/catty 感兴趣的朋友可以点个star关注一下,如果想加入一起开发也可以联系我,博客有我的邮箱。

当然项目还在稳步的开发中,目前已经有公司的生产环境在使用了,应该说是对我的设计理念和设计能力的一个肯定。当然项目还在继续的迭代和重构之中,我希望能够沿着这条路走下去,把Catty做成一个超越Dubbo的、和service-mesh结合的一个高性能、跨语言RPC框架。

最近在看service-mesh相关的,发现不管是linkerd还是istio都是依附于k8s的,我理解的还是希望service-mesh可以基于主机,虽然这样貌似抛弃了很多k8s的便捷的api,但是至少让用户有得选,我一直觉得让用户有得选是一个非常重要的地方。

之后的学习计划还是挺艰难,去年的学习可以说成果斐然、收获颇丰,但是现在的工作节奏使我暂时很难给自己安排自主学习时间。我觉得之后学习还是计划深入学习了解机器学习,这方面还是想深挖一下,我觉得等我35、40的时候,机器学习很可能成为一项必备技能。

我觉得自己是时候需要培养一下产品思维了,其实自己挺想做点自己的事情,内容创作也好,平台的好,都想尝试一下。

今年的框架主要是看linkerd,学习下scala、rust、C/C++语言,算是正式入门计算机这门学科了。然后希望Catty越做越好吧。

  1. scala
  2. rust
  3. C/C++
  4. nginx源码
  5. 自己写一个java的raft库,工业级别的
  6. linkerd源码
  7. Catty java版具有完备的rpc功能,兼容gRPC等主流rpc框架的协议。

哎好久没写博客感觉文笔变差了。之后慢慢再熟练起来吧!