小型电商web架构!小而美!

2019-08-14 08:08:18


这一年,从传统软件行业进入到电商企业,算是一次转行了吧。刚开始,觉得电商网站没有什么技术含量,也没有什么门槛,都是一些现有的东西堆积木似的堆出来而已。然而,真正进入到这个行业之后,才发现并不是这样。记得有人说过,好的架构,是演化出来的。电商网站的架构也是如此,现在牛逼的电商网站,看似很复杂,很牛逼,其实也是从很小的架构,也是从没什么技术含量开始的。架构的演化过程,就是在技术团队,不断追求极致的过程。


技术架构



一般,初期的电商网站,基本就几个业务子系统,网站前台,商家前台,系统管理后台,App,M站等。业务量,也不是很大。所以,mvc + 缓存 + 数据库 。基本就搞定了。

其实,单就开发效率而言,.net mvc 的技术架构不会比LAMP 开发速度慢。所以,一些企业,为了快速推出自己的电商平台,也会采用.net 架构。


基础架构



基础架构层面。这是一个很简单的基础架构了。

1前端网站和M站,考虑到访问量和系统的可用性,基本会采用分布式部署。通过代理服务器进行请求分发。

2其他的业务子系统,像商家前台,和管理系统,基本上都是单机或是主从部署。

3各个DB ,Redis 服务和 文件和图片服务,搜索引擎Solr服务等,采用主从部署。



详细架构



整个系统架构里面,还有一个比较重要的组成部分,那就是监控系统。例如:流量监控,硬件监控,系统性能监控等, 还有就是对某个页面进行监控,设置页面的其中一块进行监控等。它是提高整个平台可用性的一个重要手段,多平台,多个维度的监控,能够确保系统的可用性,一旦出现异常,特别在硬件或者性能方面出现异常,监控系统也能立刻发出警告,这样也好防范于未然。


日志系统与监控系统的解决方案


监控系统主要用于服务器集群的资源和性能监控以及应用异常和性能监控,日志管理等多维度的性能监控分析。一个完善的监控系统和日志系统对于一个系统的重要性不必我多说,总而言之就一句话,只有实时了解各系统的状态,才能保证各系统的稳定。

如上图所示,监控平台监控的范围很广,服务器性能及资源,还有应用系统的监控。每个公司都有特定的平台统一监控的需求及解决方案,但是监控平台的任务和作用基本是一致的。

日志日志是监视程序运行的一种重要的方式,主要有两个目的:1.bug的及时发现和定位,2.显示程序运行状态。正确详细的日志记录能够快速的定位问题。同样,通过查看日志,可以看出程序正在做什么,是不是按预期的设计在执行,所以记录下程序的运行状态是必要的。这里将日志分为两种:1.异常日志,2.运行日志。

我们主要是使用log4net,将各个系统的日志,持久化记录到数据库或者文件中,以方便后续的系统异常监控和性能分析。如何集成log4net,这里不再说明。

日志记录的几个原则:

1区分日志级别一定要区分清楚,哪些属于error,warning,info等。

2记录错误的位置,如果是分层系统,一定要在某个层统一处理,例如,我们的mvc架构,都是在各个action中catch异常,并处理,业务层和数据库层这些地方的异常,都是catch到异常后,往上一层抛。

3日志信息清晰准确有意义,日志尽量详细点,以方便处理。应该记录相关系统,模块,时间,操作人,堆栈信息等。方便后续处理。

监控:监控系统是一个复杂的系统平台,目前有很多的开源产品和平台。不过我们平台小,监控任务和需求少,所以基本都是自己开发,主要有这五个方面:1.系统资源,2.服务器,3.服务,4.应用异常,5.应用性能。

具体的架构图如下:

系统资源监控监控各种网络参数和各服务器相关资源(cpu,内存,磁盘读写,网络,访问请求等),保证服务器系统的安全运营;并提供异常通知机制以让系统管理员快速定位/解决存在的各种问题。目前比较流行的应该是zabbix。

服务器监控主要是监控各个服务器,网络节点,网关,等网络设备,的请求响应是否正常,通过定时服务,定时去ping各个网络节点设备,以确认各网络设备是否正常,,如果哪个网络设备出现异常,则发出消息提醒。

服务监控指的是各个web服务,图片服务,搜索引擎服务,缓存服务等平台系统的各项服务是否正常运行,可以通过定时服务,每隔一段时间,就去请求相关的服务,确保平台的各项服务正常运行。

应用异常监控目前我们平台的所有系统的异常记录,都记录在数据库中。通过定时服务,统计分析一段时间之内的异常记录。如果发现有相关重要的模块的系统异常,比如支付,下单模块,频繁发生异常,则立即通知相关人员处理,确保服务正常运行。

应用性能监控在api接口和各应用的相关位置进行拦截和记录下程序性能(sql性能,或是 程序执行效率)。相关重要模块提供性能预警,提前发现问题。 同时统计相关监控信息并显示给开发的人员,以方便后续的性能分析。

总而言之,一个好的系统架构应该从扩展性、安全性、性能和可靠性来考虑。罗马不是一天建成的,架构适合就行,可以先行之而后优。通过渐进演化的过程,逐步是系统越来越完善。