网站业务架构演变过程

网站业务架构演变过程

有一天,我突发奇想创建了一个站点,基于LNMP架构,起初只有我自己访问,后来因为我点儿正,访问量越来越大,所以最终导致下面的架构演变。
1. 单台机器因为只是一个小站,访问量一天也没有多少uv(100以内),所以用一台1核1g的机器足够了。机器上安装的是CentOS系统,然后搭建了nginx+php-fpm+mysql的环境。


2. 一台变两台

jg2.jpg

访问量越来越大,日uv突破5000,单台机器不够了,本可以增加机器配置编程4核8G,但是考虑到还要换机器,所以直接添置一台DB服务器单独跑MySQL服务。原来的服务器只需要跑nginx+php-fpm,新加服务器跑MySQL服务。 在这里,大家往往会遇到一个问题,就是如何在多台机器上编译安装LAMP环境,在单台机器上编译大家都没有问题,PHP放在最后,因为它依赖MySQL,但我们这里需要把MySQL放到另一台机器,所以编译肯定会报错。解决这个问题,其实很简单,即使WEB上不需要MySQL,我们也要安装一下,因为编译PHP的时候依赖它。


3. 增加memcached
jg3.jpg


访问量持续增加,uv上w了,DB服务器和WEB服务器压力越来越大,这时候我们需要加一个缓存来缓解DB服务器的压力。同样是两台机器,只不过WEB机器配置需要升级了,原来的1核1g不够用了,不仅要加cpu还要加内存,因为在WEB上我们需要运行memcached服务,同时php也需要安装memcache扩展。


4. 增加WEB,并做MySQL主从
访问量又扩大了,uv到了5w,数据库服务器因为一开始配置就挺高,所以没有压力,但是WEB服务器负载有点高了,在高峰期可以感觉到网站访问变慢。所以,这时候不得不考虑要加一台WEB服务器。另外,数据库是单点,如果磁盘损坏,可能会带来意想不到的后果,所以我们有必要加一台从DB服务器,作为数据的备份。
jg4.jpg


在这里,两台WEB服务器我们并没有做负载均衡,因为为了节省资源,暂时先不去购买服务器做负载均衡,我们使用DNS轮询的方法来把用户的请求发到两台机器上,但这种该架构有个问题,一旦一台WEB机器宕机,将会有一半的用户访问不到业务。还有一个问题,我们也需要考虑到,如何保证WEB服务器上的数据一致,比如用户可能会上传图片到WEB服务器上,假如他上传到了WEB1上,那WEB2是不存在这个图片的。所以我们需要做一个共享存储让WEB1和WEB2同时可以访问,所以在这里我把WEB1的一个目录使用NFS共享出来,让WEB2去挂载。还有一个问题就是memcached服务如何分配,在这里,我是把memcaced服务分别安装到两台WEB上的,自己用自己的memcached服务。
5. mysql读写分离
访问量持续上升,uv已经到了数十万。网站在高峰期总是会卡顿那么一段时间。经排查,发现在MySQL服务器上有很多慢查询,经过各种调优依然没有太明显效果,最后决定做读写分离。 

做读写分离有两种方案,第一可以借助程序来实现,把所有的写操作指向到主mysql,所有的读操作指向到从mysql。对于这种方案,机器数量和环境不用做任何调整,唯一要做的是程序代码要改一下。第二可以借助mysql-proxy来实现,不用修改代码,节省开发成本,但需要增加一个角色。架构是这样的。
jg5.jpg



6. 避免单点引入负载均衡
两台WEB服务器因为有一台比较老,所以在高峰期时,终究是没有能扛住而挂掉。结果影响了一半的用户访问不到网站了。经过此次事故,我不得不修改架构,尽量避免单点,于是在WEB前端设置了负载均衡器,并且做了高可用。
jg6.jpg



在这里我拿nginx做了负载均衡器,并没有使用lvs,因为我觉得nginx更容易操作,更好控制。为了节省成本,我并没有单独把mysql-proxy摘出来作为独立服务器,因为那样的话,也得为它考虑单点问题。在这个架构中,其实还有一个缺陷,就是NFS服务端也是有风险的,更加保险的做法是单独搞一台服务器做NFS服务。

7. 继续扩充
uv上升到100w,两台WEB服务器明显不够用了,而瓶颈并不在mysql上。所以,只增加WEB,同时把NFS服务器单独摘出来,并做一个备用NFS服务器。

jg7.jpg



8. 引入NoSQL
uv近1000w,三台WEB服务器也早已不够,增加到5台,而MySQL服务器压力逐渐变大,针对mysql的慢查询,发现压力主要体现在个别sql语句上,该优化的已经优化到极致,对于这几个查询,其实是可以使用NoSQL的。于是,我找懂php开发的朋友帮我修改了程序,把一些访问量大的数据存储到redis,从而减少了对MySQL服务器的压力。 而Redis为了防止单点也做了主从。

jg8.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 业务架构、应用架构和数据架构是企业架构的三个主要视图,它们分别从不同的角度描述了企业的组织结构、应用系统和数据资源。具体来说: 1. 业务架构:描述企业的业务模型、业务流程、业务组织结构、业务规则等方面的内容,主要关注业务层面的组织和运营。 2. 应用架构:描述企业的应用系统、应用组件、应用接口等方面的内容,主要关注应用层面的设计和开发。 3. 数据架构:描述企业的数据资源、数据模型、数据仓库、数据流程等方面的内容,主要关注数据层面的管理和应用。 这三个架构视图通常是相互关联的,它们共同构成了企业架构的完整图像。企业需要综合考虑这三个视图,进行整体规划和设计,以实现高效、灵活、可持续的业务运营和信息化建设。 ### 回答2: 业务架构是指企业或组织的业务活动以及它们之间的关系和流程的描述。它通过定义业务的各个层次、角色、职能和交互来提供对业务的整体架构视角。业务架构是组织战略规划和业务流程优化的基础,它帮助企业更好地理解自身的业务和目标,以便做出正确的决策和规划。 应用架构是指企业或组织在实施业务架构时使用的应用系统和软件的架构设计。它包括应用系统的组成部分、模块和组件之间的关系、数据流动和交互逻辑等。应用架构的设计需要考虑到业务需求、技术要求和用户体验,以确保应用系统能够实现业务目标并满足用户的期望。 数据架构是指企业或组织在实施业务和应用架构时所使用的数据模型、数据库设计和数据管理的架构。它包括数据的组织方式、数据元素之间的关系和约束、数据的存储和访问方式等。数据架构的设计需要考虑到业务需求、数据的完整性和安全性,以确保数据能够被正确地存储、管理和使用,从而支持业务活动和应用系统的运行。 综上所述,业务架构描述了企业的业务活动和流程,应用架构设计了应用系统和软件的架构,数据架构设计了数据的组织和管理方式。这三者相互关联、相互影响,共同支持企业的运行和发展。 ### 回答3: 业务架构是一个组织或企业的业务流程和业务功能的结构框架。它定义了组织中的各个业务单元、业务过程和业务角色之间的关系和职责。业务架构的目标是确保组织的业务活动能够高效地运行,提供优质的产品和服务。 应用架构是指在实现业务架构的基础上,通过应用软件来支持和实现业务流程和功能。应用架构包括了系统软件和应用软件,其中系统软件包括操作系统、数据库管理系统等,而应用软件则是指用于支撑某个特定业务功能的软件系统。 数据架构是指在实现业务架构和应用架构的基础上,对数据的组织、管理和存储进行规划和设计。数据架构定义了数据的结构、格式、存储方式以及数据之间的关系和依赖。通过合理的数据架构设计,可以确保数据的准确性、完整性和安全性,提高数据的可用性和共享性。 在一个企业中,业务架构、应用架构和数据架构是紧密相关的,彼此之间相互影响、相互支持。一个好的业务架构可以指导应用架构和数据架构的设计和实施,而一个好的应用架构和数据架构则可以提升业务架构的执行效率和数据的管理效能。因此,企业需要综合考虑业务需求、技术能力和数据处理要求,进行业务架构、应用架构和数据架构的全面规划和设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值