专业技能
- 熟悉C/C++语言,7年的工作经验,熟悉C++11的智能指针、完美转发、Lambda表达式、多线程等新特性,对stl里的vector、map、set、list的源码实现有一定的了解。
- 熟悉栈、队列、链表、二叉树等常用的数据结构,以及基本的查找和排序算法,了解深度搜索遍历和动态规划算法,了解单例模式、策略模式、观察者模式、工厂模式、装饰模式、责任链模式等常用的设计模式。
- 熟悉Linux下的netstat、tcpdump、perf、strace、gdb等常用命令,能够使用火焰图对程序做性能分析,能够进行Linux服务器的性能优化和参数调优。
- 熟悉TCP/IP四层模型,实现过用户态网络协议栈,阅读过kcp的源码,熟悉TCP三次握手/四次挥手,了解TCP的滑动窗口、流量控制和拥塞控制,熟悉socket网络编程,了解select/poll/epoll网络IO模型以及reactor反应堆模型。
- 实现过线程池、连接池、内存池、异步请求池等常用的池式结构,了解无锁操作、死锁检测、分布式锁等组件。
- 阅读过nginx、redis、memcached的网络IO相关的源码,能基于Nginx做过滤器模块二次开发,了解mysql等索引和事务原理,了解redis的存储原理和事务模型。
- 熟悉STUN穿透、NAT映射、IPV6打洞以及P2P的基本原理,使用过HTTP2进行服务端开发。
- 了解RPC的基本工作原理,了解RPC的序列化协议,在项目中独立使用过Thrift进行rpc的开发。
项目经历
超级CDN节点
项目概述
与传统CDN不同,PCDN部署在物理距离用户更近的路由器、家用盒子和网关等设备上,从而帮助减小用户和CDN节点之间的网络传输时延。这意味着,当用户访问网站时,请求可以直接从距离用户最近的PCDN节点上获得服务,这个过程无需经过跨越许多跨越许多网络路径和中转节点,从而有效地提升最终用户获得服务的速度和性能。
使用技术
http/http2/https;dns域名解析协议;连接池、线程池等基础组件等封装;epoll网络库的封装、reactor反应堆、多线程编程;多进程守护;TCP/IP协议栈;cmake/makefile;rpc、thrift;upnp映射/nat探测;docker;gdb、coredump、backtrace、异常信号处理;nginx;quic;读写锁;p2p;
项目负责
- 基于epoll实现的reactor反应堆模型,构建高性能http服务,实现多线程下的http2服务,并引入kcp、quic模块,以支持应用在客户端的不同需求。
- 使用thrift、线程池、连接池、观察者模式、装饰者模式、unix domain socket实现多节点之间的rpc通信,让同一台机器多网卡节点进程能够共享存储,大幅提升节点利用率(提升30%),并实现了分布式系统的高扩展性。
- 使用异常信号处理、backtrace获取堆栈地址、触发生成core文件对线上节点进行异常排查,将线上异常节点崩溃率由0.6%降低到0.2%,重点关注了应用程序崩溃的应用场景,并使用严密的异常处理流程进行优化。
- 使用stun协议探测设备节点的nat类型,并通过upnp完成端口映射,让设备反连穿透成功,提升客户节点的可用性。
- 对任务管理模块和缓存管理模块的优化,在高并发请求的场景下,将应用的延时优化了20%以上。这些优化主要是通过使用读写锁等技术,实现了对系统资源的更好有效的协同管理。
- 节点自动升级、监控、PCDN等核心服务组件对于不同架构(X86-64、ARM64、MIPS等)系统及硬件上的交叉编译适配及开发维护,有效地确保了应用程序在各种硬件环境和操作系统上的稳定性和兼容性。
- 参与缓存部署、P2P打洞、P2P穿透、NAT穿透、内网穿透等系统或技术组件等设计与研发,参与全链路的策略制定和评价。
分布式KV存储
项目概述
这是一个分布式Key-Value存储系统,最初的动机是弥补HBase在可用性和性能上的不足。Server端完全采用C++语言开发,使用PacificA协议支持强一致性,使用RocksDB作为单机存储引擎。
项目负责
- 通过选用基于一致性哈希算法的哈希函数,将数据均匀分配到虚拟节点上。使用一致性hash负载均衡算法,将不同虚拟节点映射到物理节点上,以实现自适应的负载均衡以及数据高可用性和故障转移的需求。
- 基于C++11或以上的现代特性,如多线程、异步IO、Rvalue引用等,设计高性能的客户端库。以Boost的ASIO库为基础,实现异步非阻塞的TCP和UDP通讯,同时支持TLS和Socket重连机制增强安全性和容错性。利用RAII技术,实现异常安全性和资源管理策略。使用GoogleTest和GoogleMock等测试框架,进行单元测试和测试驱动开发。
- 基于Epoll和Libevent等高性能网络库,设计高效的系统线程池模型。利用线程池算法,实现任务的预分配和复用,以及动态调整线程数,避免线程上下文切换和资源争夺。采用无锁队列技术,避免共享数据冲突和死锁。
- 基于令牌桶算法和漏斗模型,设计和开发漏斗限流模型。根据业务负载和QoS(Quality of Service)要求,调整模型的参数和策略,以达到最大的并发数和最小的响应时间。
- 基于Prometheus和Grafana等监控工具,实现系统状态和性能指标的可视化和告警。利用Logstash和Kibana等工具,收集系统日志和错误,进行分析和排查问题。通过Apache JMeter和NGINX等工具,进行压力测试和性能评估,评估系统容量和性能瓶颈。
留言板小程序
项目概述
该项目是基于小程序开发的,为没有原版微信留言功能的订阅号提供留言服务。主要开发工作包括小程序前端页面设计和页面交互,以及Python后台的开发。该小程序的核心价值在于提供完整的留言服务,为没有原版微信留言功能的订阅号提供一个简单、直观的解决方案。
使用技术
- 前端UI设计及API调用:负责基于weui控件库进行排版,采用JavaScript Promise对后台接口进行SDK封装,满足了项目在前端UI呈现上的要求。
- 后端框架与数据库:搭建Django框架Web服务器,以Mysql为主数据库,同时使用Redis缓存热点留言数据,参考Restful API的形式开发后台接口,保证了数据的安全性和查询效率。
- 分布式锁:使用Redis分布式锁实现python多进程间的同步与互斥,在项目中扮演了重要的技术支持作用,保证了数据一致性。
- 缓存读写:使用Python函数装饰实现Redis的缓存读写,为留言数据读写加速。
- 使用docker和docker-compose进行服务部署,确保留言服务的高可用性和可靠性。
自我评价
- 喜欢研究开源项目,redis的源码,如string、zset,nginx多进程网络。
- 喜欢研究高并发高性能服务器设计,C10K、C1000K问题研究。
- 喜欢阅读计算机经典书籍,如《深入理解计算机系统》,基本功扎实。
- 喜欢整理技术文章,梳理技术体系,有自己的博客网站:www.nephen.cn
- 喜欢探索扩展新技术,使用vue/nuxtjs独立实现过产品官网:www.dyhlyb.com