陈辉:蘑菇街技术架构规划与成长
美丽联合集团旗下有美丽说、蘑菇街、淘世界等产品和服务,是中国最大的女性媒体与时尚消费团体。负责美丽联合集团电商架构工作的陈辉在现场为大家带来了“蘑菇街技术架构规划与成长”的主题分享。
蘑菇街最早采用单体应用,2016年,完成了一次全面的服务化拆分以及前后端分离,2016年5月,蘑菇街和美丽说、淘世界进行融合,到达了并且目前也处于多平台的阶段。
在多平台阶段面临的不仅仅是单一平台需要面对的问题,还有比如不同行业需要有自己的detail页面,不同市场需要有自己的玩法和计价规则,以及需要将美丽说、淘世界的数据融合进来等难题,所以平台化这个概念应运而生。平台化主要的目的就是能够让电商本身支持多平台业务的快速构建、部署,并通过技术手段解决隔离、选择、稳定性等问题。
陈辉介绍到,电商平台开发过程中,有几个重要的点:
- 扩展性
- 隔离性
- 基础能力
- 合作与效率
扩展性要解决的问题就是怎么支持横向和纵向的快速扩展。而隔离性意味着更改某一平台的代码不会对另一平台造成影响。
他指出平台化还需要有一些基础能力,例如将模块化应用到整个设计过程中,让整个系统本身底层通过模块化的方式进行拆分和解耦。模块化以后,基于对模块的管控,可以进行热部署或者热加载,类似这样的方式可以解决线上某个节点或者某个模块导致的一些问题,通过快速的开关模式把这个模块下掉或者给它一个容灾的方式。平台化还应该有一个消息驱动来让所有模块同时做一件事情,或者让同类化的应用快速上下线做一些迭代。
当然,合作与效率在平台化过程中也同样重要。首先是稳定性,电商平台最主要依靠的就是稳定性,其次是不同模块的detail的共享和共建。由于测试较为耗时,通过工具,框架和手段来帮助大家解决测试的事情也是在这一点需要考虑的。此外,快速部署也是一个重要的问题,例如如何在平时将美丽说和蘑菇街这两个模块分开部署,但到大促阶段则把它们快速合并部署到一起。
基于平台化的这些特性,蘑菇街总结出了一些在一整套平台化过程中的原则:
- 代码只能有一份
- 不同平台的业务要能做到隔离,互不影响
- 要能支持业务“快速扩展”
- 必要时需要支持共建
- 日常支持分开部署,但是大促时需要合并到一起
平台化能够解决稳定性、快速扩展能力和标准化场景的问题。但业务上多平台之间的穿插,相互组合能力或者定制化能力,是平台化不能解决的。除了后端的服务,电商还需要安全、风控、运维以及其他任何的一些基础支持,以及前端。
陈辉接下来为大家讲解了蘑菇街未来的两个方向。第一个方向是行业中近几年较为热门的概念,如无服务器(Serverless)、微服务(Microservices)、服务网格(Service mesh)和面向服务的架构(SOA)。第二个方向则是关注业务本身,这样才会有更多资源来支持业务。
最后陈辉还提到了时机的问题,即由于云厂商的服务日益成熟,处于多平台阶段的蘑菇街正大规模地把整体服务全部上腾讯云。
- 分分钟搭建MySQL Group Replication测试环境(二)(r12笔记第41天)
- php5编译安装常见错误和解决办法集锦
- MySQL自增列主从不一致的测试(r12笔记第37天)
- 分享Mac/Linux系统Shell终端利器SecureCRT以及注册破解方法
- MySQL中GTID和自增列的数据测试(r12笔记第38天)
- 分享一个入门级可控多线程shell脚本方案
- PhalGo-介绍
- 实测Nginx服务器开启pagespeed加速效果
- MySQL频繁停库的问题分析(r12笔记第33天)
- 解决Nginx Helper插件一键清理缓存功能导致网站打不开问题
- Oracle 12c DBCA浅析(r12笔记第48天)
- MySQL中的derived table(r12笔记第47天)
- Oracle数据库端口突然无法访问的分析(r12笔记第46天)
- MySQL中的反连接(r12笔记第45天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 16 . PythonWeb框架之Django
- java编程思想第四版第十章总结
- 单摄像头+深度学习实现伪激光雷达,代码已开源
- 04 . 前端之JQuery
- 05 . 前端之BootStrap
- 15 . PythonWeb框架本质
- 01 . 消息队列之(Kafka+ZooKeeper)
- 01 . 分布式存储之FastDFS简介及部署
- LoRa节点开发——加入打印调试LoRaWAN
- 03 . Redis集群
- 02 . Redis哨兵
- 01 . RabbitMQ简介及部署
- 01 . Memcached原理,主从复制,代理,管理后台
- JsonPath验证类既Groovy重载操作符实践
- Selenium等待:sleep、隐式、显式和Fluent