电商的技术架构

作者:管理员发表于:2019-04-17

似乎所有网站,包括所有的电商网站,在起成长发展的过程中,都会暴露出数据库瓶颈问题,优化数据库即使到了公司的成熟期也还是不断要进行,一方面是因为数据架构确实是一个比较专业的领域,另一方面,研发人员,即使是资深的研发人员,由于工作领域的不同,比较少去关注数据库,自然就缺少敏感度, 系统架构师,熟悉硬件和物理部署还是有必要的。以下简单叙述下电商架构的一些要注意的地方,我想很多公司都会碰到这样的一些问题。

1、数据架构中很重要的一点是数据的拆分,如果你的公司发展很快,你的数据量很可能是爆炸式增长,海量数据比较轻易得就达到,那么在数据容量、读写瓶颈存在的情况下,你怎么办? 由于业务的快速发展,我更倾向的是先堆硬件,然后在没有太大压力的情况下,进行重构和调优,这会让你更冷静的分析问题。数据的拆分一般可以分为垂直拆分和水平拆分,垂直拆分意思是把不同的业务,子业务的数据存放到不同的数据库主机。而在一些大的业务中,我们可能还需要继续进行拆分,把数据分片到不同的数据库主机上,比如一个很大的商品数据库,我们可以按照商品ID作为主键,把数据按一定算法分散到许多台数据库机器上。通过拆分业务/数据,我们也分散了风险,如果出现了极端情况,某台数据库机器宕机,那么也只是影响部分业务/用户。

2、电商在发展的过程中,会需要进行新的功能的尝试,我可以理解移动互联网的快速迭代,但这种快速迭代只是一个手段,并不是要追求的目标,快速迭代是要求可控的,意即,你的新功能特性是否经过了充分验证,是否做过压力测试,在你已经有了大量用户的时候,做实验失败的成本是很高的,我们应该缩小试用功能的用户范围,在小部分用户中试用功能,不断收集数据和改进,严格的说,在功能的上线之前,就应该考虑好数据的收集和处理,有一个分析和度量的机制,而不是事后才考虑如何进行数据收集。你需要发布到生产环境的时候,你也需要一个灰度发布的系统,这点可以参考国外的一些公司,比如facebook的做法,通过不断灰度发布,监控发布后的各种性能/业务反馈数据,最终可以实现对全球范围内的大升级。

3、由于业务的快速发展,是否实现某些功能,你需要权衡取舍,架构师要和业务方面充分沟通了解,架构师也要和硬件运维人员充分沟通,不可能充分实现所有的需求,在合适的时间,以合适的成本,实现某些需求,并且考虑到后续的扩展,是架构师素质的一个重要体现。沟通、沟通、再沟通,这样你才能明确需求,因为业务方很多时候并不明确自己想要什么,你需要以他们的语言和他们进行交流,定下重大的需求,明白各个目标的轻重缓急很重要,这样,你可以合理安排自己的开发活动,虽然事情也许不会像你想象的那样进行。

4、所有的大点的公司都在做开放平台,包括内部也有各种服务接口,那么对于各个接口的设计容量,性能统计,流量分析,流量限制,是需要设计的时候考虑的。服务化,也是许多公司强调的,人人都想把系统拆分为各种独立的服务,可以松散进行耦合,可以方便的上下线、调度、降级,发布,彼此不影响,但服务拆分得过细也不是一个好事,你需要有手段明白你的诸多业务的调用关系。

5、上规模的公司,往往在内部把基础软硬件资源服务化了,供业务系统共享复用,目前的技术发展很快,借助开源组件,许多中小公司也可以比较方便的构建自己的基础云设施,在机器规模到达一定程度后,通过这些内部私有云/服务化的方式,可以大大节省成本。比如网站的缓存会用得很多,提供一个缓存云,在各个IDC之间有一个全局的失效处理的机制,这些都是值得考虑的。

6、在电商的技术架构中,分布式、水平扩展,在许多应用服务,基础设置都进行得不错,但数据库往往仍然属于集中式的存储,因为如果要水平拆分的很顺利,往往需要把数据打散,而传统关系型数据库中存储的一些数据对于一致性的要求是高的,对于一致性要求高的数据,推荐是用更高端的硬件去处理/存储,没有必要强迫自己把所有数据都拆分。有些时候,能通过硬件解决,可能是最佳的解决方案,这样你会有 更多的时间精力去专注自己的业务设计。

7、互联网公司,大数据的分析成为一个重要的领域,如果要实现大数据的架构,传统的Oracle,MySQL往往是力不从心的,这点基于分布式的,列存储的数据库占据了很大的优势,所以,如果你真的有海量数据库,那么熟悉hadoop等类似的框架/技术/工具集是有必要的。数据库架构师不应该只专注于传统关系数据库,也应该熟悉其他的数据存储分析产品。

8、大数据,照我的理解,可能更多层面上还是验证一些想法,辅助决策,市面上吹得比较神,用数据来驱动业务发展,总是感觉的不太真实,也许国外的少数公司已经到达了这个境界吧,在有了海量数据后,通过分析这些数据,能够提炼出一些数据产品来,还是很有价值的,这要求技术人员也熟悉业务逻辑,这样才能和业务团队一起来发掘大数据的价值。

9、数据的安全要加以重视,因为你是电商公司,涉及到金钱。主要两方面的安全,1,数据库的安全要加以重视,培训研发人员,DBA安全技能是需要的,平时的安全扫描也是需要。2,业务层面的安全,通过对业务数据的监控分析,你也许可以找到一些问题所在,比如有帐号的异常活动,这点也是数据分析的价值所在。

10、许多公司发展到后来,都需要考虑多机房的部署,一方面是扩容/容灾,一方面也是成本的考量。那么在多IDC的设计的时候,应用层往往是比较好部署和设计,但数据的拆分,你会碰到很多难点,这个时候,不要为拆而拆,你一定要对自己的数据有深刻的了解,它对一致性的要求有多高,它能否被拆分到到多个IDC而不会导致业务异常, 更具工程实际的方案是,对于最终一致的数据,我们是可以考虑分布到不同的机房的,通过一些应用设计的技巧减少延时对于用户的影响,而对于一些一致性要求很高的数据,集中放在某个机房,其他机房存一个副本。在各个数据中心出现问题的时候,由于数据的分区,你要设计方案,尽可能快的恢复到正常情况,这很可能需要你在不同数据,不同粒度上加以综合平衡考量。