陈辉:蘑菇街技术架构规划与成长
美丽联合集团旗下有美丽说、蘑菇街、淘世界等产品和服务,是中国最大的女性媒体与时尚消费团体。负责美丽联合集团电商架构工作的陈辉在现场为大家带来了“蘑菇街技术架构规划与成长”的主题分享。
蘑菇街最早采用单体应用,2016年,完成了一次全面的服务化拆分以及前后端分离,2016年5月,蘑菇街和美丽说、淘世界进行融合,到达了并且目前也处于多平台的阶段。
在多平台阶段面临的不仅仅是单一平台需要面对的问题,还有比如不同行业需要有自己的detail页面,不同市场需要有自己的玩法和计价规则,以及需要将美丽说、淘世界的数据融合进来等难题,所以平台化这个概念应运而生。平台化主要的目的就是能够让电商本身支持多平台业务的快速构建、部署,并通过技术手段解决隔离、选择、稳定性等问题。
陈辉介绍到,电商平台开发过程中,有几个重要的点:
- 扩展性
- 隔离性
- 基础能力
- 合作与效率
扩展性要解决的问题就是怎么支持横向和纵向的快速扩展。而隔离性意味着更改某一平台的代码不会对另一平台造成影响。
他指出平台化还需要有一些基础能力,例如将模块化应用到整个设计过程中,让整个系统本身底层通过模块化的方式进行拆分和解耦。模块化以后,基于对模块的管控,可以进行热部署或者热加载,类似这样的方式可以解决线上某个节点或者某个模块导致的一些问题,通过快速的开关模式把这个模块下掉或者给它一个容灾的方式。平台化还应该有一个消息驱动来让所有模块同时做一件事情,或者让同类化的应用快速上下线做一些迭代。
当然,合作与效率在平台化过程中也同样重要。首先是稳定性,电商平台最主要依靠的就是稳定性,其次是不同模块的detail的共享和共建。由于测试较为耗时,通过工具,框架和手段来帮助大家解决测试的事情也是在这一点需要考虑的。此外,快速部署也是一个重要的问题,例如如何在平时将美丽说和蘑菇街这两个模块分开部署,但到大促阶段则把它们快速合并部署到一起。
基于平台化的这些特性,蘑菇街总结出了一些在一整套平台化过程中的原则:
- 代码只能有一份
- 不同平台的业务要能做到隔离,互不影响
- 要能支持业务“快速扩展”
- 必要时需要支持共建
- 日常支持分开部署,但是大促时需要合并到一起
平台化能够解决稳定性、快速扩展能力和标准化场景的问题。但业务上多平台之间的穿插,相互组合能力或者定制化能力,是平台化不能解决的。除了后端的服务,电商还需要安全、风控、运维以及其他任何的一些基础支持,以及前端。
陈辉接下来为大家讲解了蘑菇街未来的两个方向。第一个方向是行业中近几年较为热门的概念,如无服务器(Serverless)、微服务(Microservices)、服务网格(Service mesh)和面向服务的架构(SOA)。第二个方向则是关注业务本身,这样才会有更多资源来支持业务。
最后陈辉还提到了时机的问题,即由于云厂商的服务日益成熟,处于多平台阶段的蘑菇街正大规模地把整体服务全部上腾讯云。
- 数据恢复-SQL被注入攻击程序的应对策略
- MySQL数据库数据信息迁移
- NFS存储服务部署
- ssh服务、密钥登陆配置
- 本地yum仓库搭建及rpm软件包定制
- CentOS6.9-zabbix3.2启动失败原因及页面没有mysql选择项
- inotify软件部署及实时同步
- Linux下批量修改文件名方法
- Tomcat启动慢解决方法(本人CentOS7.4系统)
- Nginx软件部署配置过程
- iptables网络安全服务详细使用
- 未来哪个行业能赚钱,看百度、阿里、腾讯投资的企业你就知道了!
- Augmate公司应用分布式账本技术,将IOTA整合为物联网设备管理平台
- 一域名一年前六位数终端易主 是为了......
- 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 数组属性和方法
- 「influxDB 原理与实践(二)」详解influxDB的写入与查询
- Nginx系列:https配置
- 笛卡尔积、等值连接、自然连接、外连接一文看懂
- nginx系列:常用利用shell统计日志
- Nginx系列:图片过滤处理
- Nginx系列:几款负载均衡第三方插件的安装与使用
- 「高并发通信框架Netty4 源码解读(三)」NIO缓冲区Buffer详解
- UML类图符号:各种关系说明以及举例
- 「高并发通信框架Netty4 源码解读(四)」NIO缓冲区之字节缓冲区ByteBuffer详解
- 「influxDB 原理与实践(三)」连续查询
- 为什么使用OPA而不是原生的Pod安全策略?
- 浅入浅出 Java ConcurrentHashMap
- 「高并发通信框架Netty4 源码解读(五)」NIO通道Channel详解
- 图解一致性哈希算法,全网(小区局域网)最通俗易懂
- 「高并发通信框架Netty4 源码解读(六)」NIO通道之Socket通道