目标是在现代条件下创建一个新的高负载启动。 我们将考虑使用
Billingolang示例创建建筑,
Billingolang是一个通用的通用计费项目,以golang编写。 该项目包括通过API,网站,集成到会计系统,报告和图表中的访问。
单线程系统最初被抛弃。 我必须在Erlang,Golang和Rust之间进行选择。 选择Golang作为主要的编程语言,是因为很难找到Erlang程序员,尽管代码的稳定性和热插拔对Erlang有利。 尽管正式缺乏竞争条件,Rust仍然更适合不用于编写应用程序,而是用于驱动程序和操作系统。
传统
RabbitMQ上不会发生系统组件之间的消息传递,而在
NATS上 ,后者会显示当前正在使用的服务器上的基准测试,每秒100万条消息(集群为360K),而野兔则为40K。 是的,它比RabbitMQ更快,更容易集群。
数据库:
MySQL InnoDB Cluster 7.6 (MySQL服务器8.0)。 华丽的布局和调试社区工具
MySQL Workbench 。
API-用
Swagger (OpenAPI 2.0)编写。 这样可以避免不同程序员的错误,生成干净,文档齐全的代码和API文档。 不幸的是,Swagger
默认情况下使用
大猩猩/ mux进行生根 ,但生成完整的API后,将重做
kataras / muxie的根-更快。
前端:从可用的框架中进行选择:虹膜,蜜蜂和狂欢-选择了狂欢。 速度比Iris慢,但所有功能都是现成的,包括与图形的集成。 API仍将承担主要负载。
扩展:所有系统组件都组装在LXC容器中,而它们前面是
HAProxy平衡器。 随着客户端的增长,扩展的思想可以归结为在保持容器结构的同时顺序切换到功能更强大的服务器,然后将容器分发到单独的服务器,将HAProxy替换为NATS。 除了经典的硬件缩放之外,总有可能增加容器处理程序中用于请求API和站点的goroutine的数量 尽管如实践所示,此过程具有逻辑限制。
总的来说,本文的主要思想和我的坚定信念是,尽管现代条件下的高负载项目的初始架构没有必要在单线程系统上构建,但尽管它们已经开发了多年的基础架构并且存在大量可用的程序员。 并且必须通过轻松地转移到功能更强大且分布更广的设备上来初步创建项目的整个计划。 这将使将来有可能轻松地在扩展硬件和代码之间找到平衡,而不会增加成本。
新创业公司常犯的最常见错误是架构的初始开发不佳。 根据原则-“迅速开始写作,然后我们会弄清楚”。 通常,结果是-这导致项目崩溃。
正如他们所说-“成功的90%是准备工作”。 不用担心最初花钱创建一个有能力的,周到的架构-它会带来丰厚的回报。
祝你好运