🚀 最基础的网站架构全貌图(新手入门)

无论是开发者、产品经理还是客户,都需要了解一个网站是怎么运行的。

作为开发者: 要从前端、网络接入、云端、云端存储等多个方面都去了解,了解每层应该应用哪些不同的技术栈,如果不是全栈开发者,对其他层的了解,会易于整个开发过程中的沟通,加快整个业务开发时间。如果是全栈开发者,就要从全貌里了解每层应该使用哪种技术栈,利于业务的快速迭代。

作为客户: 了解网站全貌, 对IT业务的价值是较高还是较低有个判断,比如如果是个电商独立站,对IT网站的全貌了解之后,尤其是有SEO(搜索引擎优化排名)的需求,在选择技术栈上有非常多的限制。如果是企业官网,如果只是商务需求给用户展示,没有从搜索引擎或其他平台引流的需求,技术栈可能相对会简单一些。

🛰️ 网站架构全貌图

通常一个大型网站的架构全貌要复杂的多,下面是最简单的网站全貌图,之所以使用这么简单的图,是因为90%的网站应用都是简单站点,既没有没有几千万、几十亿的高并发流量需要去解决,也不需要铺设大量的服务器,可能只需要1-2个云厂商的配置最差的机器。

网站全览图

从图上其实我们能看出来网站主要分为五个层次:

大前端: 如果如上图所示,一个客户需要Android、iOS、小程序、Mobile站、PC站这五个端都需要的话,那么这一层是整个网站开发量最大的层了。

网络接入: 网络接入开发量不大,有现成的工具, 例如: Nginx, BFE等开源工具。很多开发者其实意识不到这一层的重要性,常常会忽略。但这一层可以做流量拒绝、转发规则应对多端各自需求等,既可以帮客户省服务器费用,还可以帮客户提升商誉,甚至可以帮客户减少一些恶意竞争。

云端业务逻辑: 这层通常就是一些客户的业务需求,具体的技术栈选择非常多,如果是全栈开发者,通常会选择Node.js全家桶, 一个人就能满足客户的所有需求。

云端存储:对于95%以上的网站,只需要使用MySQL数据库就够了,因为MySQL数据库单张表就可以维护2000万数据量了,而且性能也非常好。只有活跃用户超过50万,每天产生的数据能超过2000万以后,再考虑通过加缓存(Redis)提升响应速度,考虑加消息队列(kafka)进行流量的削峰处理。

🚁 大前端技术栈

🍄 Android客户端: Kotlin, Kotlin是Android原生开发第一选择。如果想要跨平台,可以选择Flutter和ReactNative, 两个都可以在一次开发,双端部署,但依然少不了和kotlin的参与,只是kotlin参数的比较少。其中Flutter是专门为跨平台的,ReactNative是基于React的,顺带完成跨平台的任务。如果要是追求极致的客户端原生性能,最好不要采用跨平台框架。

🍄 iOS客户端: Swift是iOS端的原生开发编程语言。如果功能简单,想要跨平台开发,同Android客户端一样,可以选择Flutter和ReactNative。

🍄 小程序: 小程序是中国开发者独有的技能,可以使用UniApp框架进行开发。

🍄 Mobile站和PC站: TypeScript、ECMAScript,框架选择有React和Vue, 对应的两个框架都有SSR的开发框架,Next.js是基于React开发的,Nuxt.js是基于Vue开发的。

🚅 网络接入技术栈

网络接入的选择不是很多,可以推荐的两个开源项目热度最高的工具:NginxBFE。当然也有lighttd和apache等古老工具,完全不推荐了。

🍁 Nginx: Nginx是c语言开发的,不止提供网络接入和转发的功能,还可以提供WebServer的功能。如果Nginx满足不了需求,可以开发Nginx扩展和插件满足需求。

🍁 BFE: BFE是百度开源统一的七层流量转发平台,日处理请求达万亿级别,是业界最大规模的统一接入服务之一,代码和文档质量都非常高。

大公司通常会有专门的团队,开发属于自己的网络接入和转发,也有很大一部分大公司会选择nginx进行二次开发。

对于小网站来说,如果在云厂商上部署,云厂商通常也会提供负载均衡和网络接入转发的组件,当然也是收费的。

重要的事情说三遍 重要的事情说三遍 重要的事情说三遍

不要因为网站小而不引入接入层,相反,网站小更应该搞接入层

不要因为网站小而不引入接入层,相反,网站小更应该搞接入层

不要因为网站小而不引入接入层,相反,网站小更应该搞接入层

🚢 云端业务技术栈

云端,也就是我们通常说的服务端开发,有太多选择,例如: Java、PHP、Node.js、Golang、 Ruby、Python等,每个语言又有好多框架,可以简单的列举一些, 下面的列举主要是基于高并发。

🌹 Node.js: 与Node相关的服务端开发框架, 例如: Koa.js、Express.js、Nest.js等,这些框架都可以实现高并发,但对同时实现高并发又对计算高性能有要求的,可能就没办法满足了。

🌹 Golang: golang相关的框架有Gin。Golang是既可以满足高性能,又可以满足高并发,当然Golang的缺点是对于极致计算性能,也是没办法满足,对于极致计算性能(CPU密集型)的业务,通常会选择C/C++技术栈。

推荐上述两个方向的框架,主要是因为其他编程语言的Web框架,通常会有不少的性能损失,同时还不能很好的支持高并发请求。

✈️ 存储和计算相关技术栈:

一个网站最离不开的就是存储,存储通常就是数据库技术, 如果数据库出现了瓶颈,减少数据库的访问,这就用到了缓存技术,如果网站的访问量足够大,导致数据库和缓存都完全没办法同步支撑的访问量,就要考虑到削峰,流量的削峰,就得使用消息队列

🌶️🌶️ 数据库: 数据库首选MySQL。为什么选择MySQL的原因是,MySQL足够稳定,r如果出现问题,网上有足够的资料可以参考,当然也可以选择PostgreSQL和mongodb, 个人没搞过PostgreSQL, 对于MongoDB, 在数据的可靠性、一致性、以及安全性等方面,是不如MySQL。

🌶️🌶️ 缓存技术: 常用的缓存是Redis和Memcache, 其实这两个都是基于内存(Memory)的,Redis和memcache都是Key-Value数据库,通常是位于数据库之前,缓存一些数据库的常用数据来减轻数据库的访问压力, 个人更倾向于Redis, 因为Redis除了Key-Value之外,还具有可持久化日志功能。

🌶️🌶️消息队列: 现在常用的消息队列技术就是Kafka,这几年,大数据技术发展迅猛,其中 Kakfa 凭借高可靠、高吞吐、高可用、可伸缩几大特性,成为数据管道技术的首选。从简单的介绍可以看出,Kafka解决问题的场景,就是大数据场景,对于小网站来说,基本不会涉及到这项技术。

📱 联系方式


更多文章或咨询关注:微信公众号(pwfocus) 项目合作加个人微信
pwfocus 个人微信