架构设计 - 模块一
微信业务架构
学生管理系统
需求分析
需求:
①可以通过公网域名访问
②要求至少三个人合作完成
③能够支撑管理 1000 个学生
④答辩的时候会根据架构方案进行打分,不推荐太简单和太复杂的方案
现状:
①大家都会 java,但是有一个是 php 高手
②大家经济条件一般
分析:
一、需要公网域名访问,所以服务需要部署到公网上,由于大家条件一般,所以不建议购买物理机进行 IDC 托管。比较省钱的方式为注册云账号,购买云服务,例如腾讯云、阿里云、百度云。对比选择便宜的一个进行购买。
二、由于需要三个人合作完成,就是三个人都需要有负责的模块,并且有代码输出,理解实现方式和架构原理,三个人都会 java,所以推荐使用 java 语言进行开发。弊端是解决问题耗时会比较长,因为三个人都不是高手。如果使用 php 有点是遇到问题有一个高手可以解决,弊端是另外两个人只能进行基础的编码,并且由于对语言不了解,对使用的框架也不了解对第一个人的依赖程度高,工作量会堆积到一个人身上,容易让另外两个人失去做项目的兴趣。
三、1000 个学生的管理,表明学生管理系统的压力小,即使 1000 人同时进行抢课,使用 sql 服务完全能够处理,不需要接触缓存对数据库进行减压。并且单台 mysql 完全能够满足性能要求。
四、由于使用云服务 mysql 在云上自带容灾处理,所以不需要购买 mysql 从库。前端分发可以直接使用 LB 代替独立部署的 Nginx,云服务的 LB 本身具有容灾配置。
五、考虑业务简单,不需要进行私有网络搭建和复杂的网络结构设计。
方案一
架构图:
方案描述
1-LB 是负载均衡,需要配置会话控制,保证一个会话请求只分发到一台服务器,这样能保持登录状态。域名绑定到 LB。
2-两台服务器部署同样的应用,能够有效的分流,同时如果有一台机器出现问题,网站不会受影响依然可访问。
3-整个系统不区分学生端和教师端,都是一个登录界面,通过权限控制显示内容和可操作内容。
4-学生量不大,学生信息由后台录入,不做注册审核。
5-数据库根据所掌握的数据库进行选择(例如:SQL Server、MySQL)
方案二
架构图
方案描述
1-LB 是负载均衡,做流量的负载转发。域名绑定到 LB。
2-两台服务器部署同样的应用,能够有效的分流,同时如果有一台机器出现问题,网站不会受影响依然可访问。
3-引入云 Redis 缓存作为 session 共享组件,保持登录状态。
4-系统区分学生端和教师端,教师端和学生端内容分离。
5-学生量不大,学生信息由后台录入,不做注册审核。
6-数据库根据所掌握的数据库进行选择(例如:SQL Server、MySQL)
方案对比
对比分析:
①合适:两个系统都能满足现有需求。
②简单:方案一相对简单,方案二相对复杂
③可扩展:方案一扩展性较差,方案二扩展性更好
④其他:方案一的会话保持会导致两台服务器的负载不均匀,方案二的 session 共享可以解决负载不均问题。
方案选择:
根据毕设要求和方案一与方案二的对比,选择方案二更优,方案一过于简单,方案二有一定的复杂度,能够兼顾扩展性更适合作为毕设来做。
版权声明: 本文为 InfoQ 作者【逝水流】的原创文章。
原文链接:【http://xie.infoq.cn/article/a45ab3681915553d2790777fb】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论