基于 spring 构建的 淘宝虚拟业务系统

26
基基 spring 基基基 基基基基基基基基基基 基基

description

基于 spring 构建的 淘宝虚拟业务系统. 淘宝网:虚明. 自我介绍. 花名:虚明 姓名:周剑 2007-2009 雅虎 平台技术 C/C++/PHP 2009-2012 淘宝 新业务 JAVA 高性能并发业务系统设计与开发. 主要内容. 淘宝虚拟业务及架构介绍 基于 spring 构建业务层 应用 数据库 中间件 自定义 spring 特性 问题. - PowerPoint PPT Presentation

Transcript of 基于 spring 构建的 淘宝虚拟业务系统

Page 1: 基于 spring 构建的 淘宝虚拟业务系统

基于 spring 构建的淘宝虚拟业务系统

淘宝网:虚明

Page 2: 基于 spring 构建的 淘宝虚拟业务系统

自我介绍花名:虚明 姓名:周剑2007-2009 雅虎 平台技术 C/C++/PHP

2009-2012 淘宝 新业务 JAVA

高性能并发业务系统设计与开发

Page 3: 基于 spring 构建的 淘宝虚拟业务系统

• 淘宝虚拟业务及架构介绍• 基于 spring 构建业务层

– 应用– 数据库– 中间件

• 自定义 spring 特性• 问题

主要内容

3

Page 4: 基于 spring 构建的 淘宝虚拟业务系统

淘宝网虚拟业务线

4

Page 5: 基于 spring 构建的 淘宝虚拟业务系统

• 交易量大,日订单数千万级• 无实体商品,较少依赖库存• 业务逻辑复杂,大量事务操作• 对第三方接口依赖严重• 基于淘宝统一技术架构• 异步操作,特殊的支付方式

虚拟业务特点

5

Page 6: 基于 spring 构建的 淘宝虚拟业务系统

虚拟交易基本架构

6

Page 7: 基于 spring 构建的 淘宝虚拟业务系统

应用配置管理

7

• Property 文件 + 集中式管理 (scm.taobao.net)• 静态配置:

– Maven + antx.properties– <context:property-placeholder/>

• 动态配置: ConfigServer/Diamond

Page 8: 基于 spring 构建的 淘宝虚拟业务系统

IoC

8

• @Autowired• @Repository• @Component• @Service• <context:annotation-config/>• <context:component-scan

base-package="com.taobao.lottery.persistence"/>

Page 9: 基于 spring 构建的 淘宝虚拟业务系统

AOP

9

• Monitor : annotation + aop– 调用第三方接口监控– 定时程序运行监控– 性能优化

• 异步化 / 并发控制 / 缓存– @Aysnc

– @Once

• Tprofiler– Instrument

– 字节码注入

Page 10: 基于 spring 构建的 淘宝虚拟业务系统

MVC

10

• 淘宝 WebX– SpringExt :基于 Spring ,提供扩展组件的能力,是整个框架的基础,基于 spring schema-based

extensions 。– Webx Framework :基于 Servlet API ,提供基础的服务。– Webx Turbine :基于 Webx Framework ,实现具体的网页功能,例如: Action 处理、表单处理、

模板渲染等。

• Webx Framework – RequestContext

– 对 request/response 的处理– Session/Lazy-commit/Rewrite– Basic/buffered/set-locale

– Pipeline– 串联管道,不改变 request/response– 独立– 流程定制化

http://openwebx.org

Page 11: 基于 spring 构建的 淘宝虚拟业务系统

MVC

11

• WebX Turbine Style– 基于 pipeline– 页面驱动– 约定胜于配置

• Screen :页面主体• Layout :页面布局• Control :嵌入的页面片段• Action : Java 代码

Page 12: 基于 spring 构建的 淘宝虚拟业务系统

Database

12

• TDDL(Tabao Distributed Data Layer)– 容灾切换– 负载均衡– 自动扩容– 数据复制

– 行复制: WAL, 跨库– DbSync :异步复制

– 精卫:数据分发– 愚公:数据迁移和扩容

Page 13: 基于 spring 构建的 淘宝虚拟业务系统

TDDL example

13

Page 14: 基于 spring 构建的 淘宝虚拟业务系统

TDDL example

14

Page 15: 基于 spring 构建的 淘宝虚拟业务系统

TDDL example

15

<bean id="commissionTableRule" init-method="init“ class="com.taobao.tddl.common.config.beans.TableRule"> <property name="dbIndexes" value="lottery_dpc,lottery_ssq,lottery_gpc"/> <property name="dbRuleArray" > <list> <value>

def type_id = #lottery_type_id#;if(type_id == 1) return 1else if(type_id == 25) return 2 else return 0

</value> </list> </property>

<property name="tbRuleArray"> <list>

<value> def type_id = #lottery_type_id#; if(type_id == 1) return #lottery_type_id# *100 + #issue_id# %1000 %64 else if(type_id == 25) return #lottery_type_id# *100 + #issue_id# %1000 %32 else return #lottery_type_id# *100 + #issue_id# %1000 %1</value>

</list></property><property name="tbSuffix" value="resetForEachDB:[_0000-_2600]" />

</bean>

Page 16: 基于 spring 构建的 淘宝虚拟业务系统

事务

16

• 常规的 spring 声明式 + 编程式事务• TDDL 不支持事务• 通过消息中间件达到最终一致

– Notify

– Metamorphosis

Page 17: 基于 spring 构建的 淘宝虚拟业务系统

Timetask

17

• @Cron(“*/1 * * * * ?”)

• Spring Quartz Scheduler– 管理界面– 集群切换– 单实例– 监控

• 案例:– TTM– AtEye– TTControl

Page 18: 基于 spring 构建的 淘宝虚拟业务系统

Cache

18

• Ibatis CacheModel

• @Cacheable/@CacheEvict– 不适用的场景举例

• 缓存敏感场景• 强一致性场景下缓存异常• 对既有代码修改程度

• Tair :强依赖• 优化:

– 远程 Tair + 本地 Cacheable – 异步化

Page 19: 基于 spring 构建的 淘宝虚拟业务系统

RPC

19

• HSF– TCP/IP | WebService– 同步、异步、 OneWay 、 Callback 、可靠异步– 序列化: JAVA/Hessian/ProtocolBuffers– OSGi– ConfigServer

• Spring JMX– 系统状态监控– 开关控制– 配置修改

Page 20: 基于 spring 构建的 淘宝虚拟业务系统

Dynamic Language

20

• <lang:groovy />• Groovy Shell

– 运行时状态检查– 提高开发效率– 部分实验性 web 开发– 特殊情况下的数据处理

• 危险

Page 21: 基于 spring 构建的 淘宝虚拟业务系统

第三方通信

21

• 通信方式: HTTP/SOAP• 昂贵的调用:异步• Spring TaskExecutor

– 共享线程池 vs 隔离线程池• Callback

– 加密、校验– 专线

• 监控– 系统– 业务

Page 22: 基于 spring 构建的 淘宝虚拟业务系统

LazyBatis

22

public interface DummyDAO { @Select List<DummyDO> selectLimit20(); }

<?xml version="1.0" encoding="GBK"?> <sqlMap namespace="dummyDAO"> <select id="selectLimit20" resultClass="com.taobao.geek.test.lazybatis.DummyDO" > <![CDATA[ SELECT id,a_b_c,ab,test_money,status FROM lazybatis LIMIT 20 ]]> </select> <sqlMap>

<bean id="sqlMapClient" class="com.taobao.geek.lazybatis.LazybatisSqlMapClientFactoryBean"> <property name="dataSource" ref="testDataSource" /> <property name="mappingLocations" value="classpath:com/taobao/geek/test/lazybatis/sqlmap/*-sqlmap.xml" /> </bean> <bean id="dummyDAO" class="com.taobao.geek.lazybatis.LazyDAOFactoryBean" > <property name="className" value="com.taobao.geek.test.lazybatis.DummyDAO" /> </bean>

Page 23: 基于 spring 构建的 淘宝虚拟业务系统

LazyBatis

23

Reflection + ASM bytecode inject

@Select@Insert@Update@Delete@PropNameList<xxxDO> getOrderList(@PropName(“user_id”)String id, PropName(“type”)int type)

Map<String,Object> m = new HashMap<String,Object> (); m.put(“user_id”, id); m.put(“type”, type);sqlMapClient.executeQuery(“namespace.getOrderList”, m);

@DAO(BeanDefinitionScanner)<yacs:scan scanner="com.taobao.geek.lazybatis.LazyDAOScannerConfigurer"> <key="base-package" value="com.taobao.geek.test.lazybatis" /> </yacs:scan>

Page 24: 基于 spring 构建的 淘宝虚拟业务系统

LazyBatis

24

Reflection + ASM bytecode inject

@Select@Insert@Update@Delete@PropNameList<xxxDO> getOrderList(@PropName(“user_id”)String id, PropName(“type”)int type)

Map<String,Object> m = new HashMap<String,Object> (); m.put(“user_id”, id); m.put(“type”, type);sqlMapClient.executeQuery(“namespace.getOrderList”, m);

@DAO(BeanDefinitionScanner)<yacs:scan scanner="com.taobao.geek.lazybatis.LazyDAOScannerConfigurer"> <key="base-package" value="com.taobao.geek.test.lazybatis" /> </yacs:scan>

Page 25: 基于 spring 构建的 淘宝虚拟业务系统

• 基于 TaobaoDiamond

– 降级开关– 灰度发布开关– 在线配置更新

@Switchable

25

Page 26: 基于 spring 构建的 淘宝虚拟业务系统

Thank You!Q & A

诚聘英才