我所经历的创业公司是如何做技术的?--《我与开源的故事》

简介: 人类的文明得以快速发展,很重要的一点在于我们可以站在巨人的肩膀上继续探索。而开源世界之于互联网行业来说就是这个巨人之一, 本文将重点阐述作者本人所了解的开源世界,以及如何通过开源项目做出有效个工作产出。

创业公司的架子

设想一下,如果几个人搞创业,起初有少许的启动资金,该怎么样将产品原型落地?

答案基本是先以最小的成本,将产品跑起来,毕竟用户量起初也是非常小的。

此时可能没有复杂的负载均衡接入,没有服务器集群,但也没有大厂拥有的任何自建设施,看似架子简单,但假如没有开源世界的帮助,所有的事情不得不从零搞起来,刀耕火种、茹毛饮血,想想都头大。


起初的基本配置大概是这样:


image.png

即便如此简单,各个模块也需要依赖众多开源世界的帮助,比如APP模块需要引入各个端的开发框架、通讯框架等甚至跨端框架,逻辑服务需要引入服务框架、访问存储的驱动层框架等,存储更是需要完全引入开源的MySQL等。


更何况,上述配置属于demo阶段,演示给投资人看看还行,如果产品上线运营,至少需要满足下面的配置:


image.png

任何一个模块的从零开发,都会耗费巨大,而创业公司更是希望就耗费集中在自身的产品创意的落地上,好钢用在刀刃上。


这里要感谢开源社区所有无私奉献的贡献者,以及为大家提供开源社区平台的Linus,向大家致敬。


通过github,使得创业公司可以借助相关的开源系统和框架顺利搭建公司框架,并专注在自己的业务核心上。


高可用架构

随着业务的发展,公司往往会面临用户的爆发式增长,生产系统故障频频。公司层面下重手处罚,责令上线需选择在业务低峰期进行,一线同学战战兢兢如履薄冰四处救火疲于奔命。究其根本原因在于基础设施、系统架构需要升级。


这是一项庞大的工程,这里只针生产系统的高可用架构展开。


计算机系统服务对外提供服务集中在网络、计算、存储三个层面,所谓的服务器千万网卡、万兆网卡指的就是网络层面单台服务能达到的吞吐上限,所谓的8核、16核CPU指的就是服务器的计算能力,所谓的服务器dd命令里的200M/s指的是存储维度磁盘的读写能力上限。


当QPS(每秒的请求量)达到一定量时,系统的瓶颈可能出现在三个层面的任何一处,好消息是设计良好的架构一般通过水平扩容(即额外增加些服务器)就可以解决网络、计算的瓶颈问题。然而由于存储的中心化体系,使得最后的系统瓶颈往往都出现在存储层面。


通过将生产服务设计成无状态的、幂等的,或者再往上一层将一批服务打包成功能模块无状态、幂等的,就可以实现业务水平扩展的能力,业界叫法不一,有的说是set化、有的说是单元化,总之意思差不多。


存储层面的高可用相对困难一些,因为存储涉及到读和写,涉及到数据一致性,有些金融场景要求更为严格。对此,近期国内的互联网巨头腾讯、阿里分别开源了PhxSQL和OceanBase,非常方便。


如果觉得PhxSQL和OceanBase类产品比较重,难以切入掌控,比如要针对自身业务特点定制一些特性,则需要更轻量更灵活的方案。


MySQL主从同步原理:

image.png

阿里有个有意思的开源方案是otter + canal,其中canal伪装成Slave接收来自所属主库的Binary log,otter做数据的逻辑处理,从而实现数据的单双向同步。


整体方案单向数据流原理图:

image.png


可视化界面大致如下:

image.png

如何做定时任务

做完存储层的高可用,建立多数据中心,接下来需要定时检测多中心的数据一致性。对于熟悉Linux的同学可能首先想到crontab,然而crontab存在局限性,比如单点问题、执行粒度问题等。


github里有很多开源的定时任务系统,如Java语言实现的quartz、Go语言的gocron等,当时我们选用quartz实现的一套相对简单的定时任务系统,根据库表配置多项定时任务实现整体业务的完整性。


破茧成蝶

随着公司更进一步的发展,此时面临着上市,技术层面也需要营造自己的影响力。

结合自身业务的高并发大流量的场景,以及长期的特性迭代与技术沉淀,大家对之前使用的开源技术有了更加深刻的理解,也在细节上有了独特的认识。更重要的是,此时人才济济,我们有能力有精力也有驱动力来重构这一套技术体系,形成更加完善的解决方案。


至此,诞生了更具稳定性更先进的技术框架,最终会回馈到开源社区,良性循环。


总结

前人栽树后人乘凉,乘凉后感谢前人的同时,希望大家能一起保护好这片林子。

目录
相关文章
|
5月前
|
安全 Ubuntu Linux
常见的几个建站CMS系统,看看你用过几个?
本文对比 WordPress、PageAdmin CMS、Wix、Discuz、PHPcms、齐博六款建站系统,从技术架构、运行环境、适用场景等方面提供选型参考。
550 0
|
7月前
|
数据采集 算法 数据挖掘
大模型应用:从静态到动态:增量聚类+大模型破解无限流数据智能处理难题.98
本文详解“增量聚类 + 大模型”融合方案,破解无限流数据(如实时工单、舆情、日志)处理难题:增量聚类实现边流入边动态分组,大模型负责语义化打标(如“快递丢失理赔咨询”),替代人工标注。涵盖原理、StreamKM++算法、Embedding转换、Prompt工程及完整代码示例,助力企业构建实时智能分类系统。
512 3
|
7月前
|
Shell Python Windows
Python 3.9.7安装教程 Windows版:解压+管理员运行+自定义路径+IDLE快捷方式指南
Python是语法简洁、可读性强的面向对象编程语言。本文详解Python 3.9.7安装全流程:下载压缩包、解压、以管理员身份运行安装程序,关键勾选“Add to PATH”并自定义安装至D盘,最后创建IDLE快捷方式并验证成功。
|
7月前
|
人工智能 API Go
AI中,几乎每天都在说的“Token”到底是什么?90%的人不知道!
把“请帮我写一篇关于如何学好Python的详细文章,字数大约2000字,要包含代码示例,语气要亲切”
11429 1
|
编译器 API 定位技术
API和SDK的区别
API 和 SDK 的区别在于:API 是一组定义了软件组件之间交互规范的接口,用于实现不同软件组件之间的通信;而 SDK 是一个全面的工具集合,包含 API、编译器、调试器、文档等,用于特定平台的应用程序开发。SDK 范围更广,内容更丰富,更具体和具象化,适合复杂的开发需求;API 则更加抽象,侧重于功能的定义和调用方式。
|
开发框架 分布式计算 API
|
安全 Java 测试技术
阿里开发手册 嵩山版-编程规约 (八)控制语句
这篇文章是《阿里开发手册 嵩山版》中关于控制语句的编程规约部分,提供了代码编写中控制流语句使用的最佳实践,包括switch-case、if-else、循环等语句的使用规范,以提升代码的可读性和健壮性。
|
关系型数据库 PostgreSQL
【一文搞懂PGSQL】5. 流复制
PostgreSQL流复制架构支持多种常见配置,包括基本的主从复制、结合PGPool-II的读写分离以及使用repmgr实现高可用性。基础环境中,主节点与备用节点分别位于不同IP。配置涵盖创建复制用户、调整核心参数以支持流复制,并确保归档与日志功能正常工作。从节点需通过备份恢复并配置为待机模式,以实现数据同步。此外,还介绍了如何验证复制状态及手动切换主从节点的方法,以及同步复制参数的配置细节。
|
机器学习/深度学习 算法 API
【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)
【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)
1008 0
|
存储 文件存储
DAS和NAS的性能对比?
【6月更文挑战第29天】DAS和NAS的性能对比?
751 4