2024-2-25 17:20
【C++埋点SDK实战】0-开篇词
大家好,我是程序喵。好多同学跟我反馈说想要我带着实战一个C++项目,我想了好久,最终决定做一个埋点相关的客户端SDK。为什么要做客户端SDK?我看过很多校招生C++简历中的项目经验,几乎清一色的Web Server,但其实现在C++在后端领域岗位相对比较少,貌似只有量化领域和某些游戏公司在使用C++做后端。如果大家想做后端方向的话,我建议去学习Go或者Java,可能会比C++更适合一些。C++现在主要应用在嵌入式领域、人工智能工业化、游戏等方向,很多移动端应用底层为了跨平台,也会使用C++,比如编解码能力、音视频能力、人脸识别能力等,都是使用C++开发,然后编译出可以在多平台运行的SDK,给业务方程序员使用。很多企业也会用QT C++做桌面端应用,这种岗位需要了解QT的相关API使用,甚至是原理,但想做合格的桌面端程序,还是要深入学习C++才行。所以,虽然很多人在唱衰客户端,但唱衰的很多都是客户端开发页面的程序员,因为现在比较流行大前端,页面很多可以用Flutter等跨平台相关的组件或前端语言开发,不太能唱衰的到C++。而且在大企业中,相关的程序性能至关重要,想要高性能,几乎都要用到C++或C,当然,Rust也行,但现在Rust在国内岗位相当少,盲目走Rust方向风险比较高。为什么要做埋点SDK?任何一款客户端应用在线上运行,我们需要监控它的在线状态,比如日活、是否有崩溃、崩溃率、某些模块运行过程中是否出现异常、用户频繁使用哪些功能等等。这些都需要团队内部的成员可以感知到,拿到这些数据,方便产品运营人员修正迭代产品功能,方便开发人员排查线上问题等。所以一般客户端应用都需要做很多埋点,把客户端应用运行过程中的相关数据传回到团队内部。当然,上面的某些能力可以当做一个特定产品需求开发,不需要走埋点。不过在线上,场景非常复杂,比如用户的使用方式、用户的操作系统、硬件等都千差万别,程序不会绝对稳定,代码中的异常位置通常不确定,所以需要开发人员在代码中做很多埋点,出现问题可以及时反馈回团队内部,团队做数据追踪和分析,进而快速修复问题。所以,这里其实就可以成立一个小组,产品主要有埋点客户端SDK + 网站 + 后端,客户端SDK可以给公司内的多个APP业务部门去集成,然后埋点数据上报到后台,各个业务部门可以在管理端查看搜索相关埋点,再提供聚类和分析能力,就更完美了。不过这个项目中,我们只会做客户端SDK,后端我会做一个模拟的mock server,只负责接收数据和返回固定body。平台因为大多数同学都使用Windows电脑,所以咱做的是Windows SDK,但因为使用的是C++语言,其实可以跨平台到Linux、MacOS、Android、iOS等,只需要把Windows平台相关特性的代码去掉,并且改动Cmake配置即可。相关知识点整个埋点SDK功能不多,代码量不大,但麻雀虽小五脏俱全,整个项目会涉及到很多C++相关的知识点:C、C++C++ 新特性线程池定时器Windows 注册表操作数据库操作文件系统相关操作时间相关操作日志系统Json加解密HTTP、HTTPS网络请求网络通信协议的设计一个大型项目涉及到的技术点,咱这个项目应该多数都会用到。对于学习进阶C++、提升项目经验,我认为还是非常有帮助的。后面我会用大概15篇左右文章(大概每周更新2篇,还会不定期更新加餐文章),带大家从0到1做这个项目,并提供相关源代码,对代码感兴趣的朋友可以先行查看:https://github.com/chengxumiaodaren/BuriedPoint 。