黄若慧

在阿里巴巴负责闲鱼技术团队
高级技术专家

工作经历

淘宝(中国)软件有限公司

  • 2009年加入淘宝参与淘宝机票业务,并负责淘宝机票的技术架构
  • 2010年参与了阿里第一个去 IOE 项目,完成了用户中心了去 IOE 和 MySQL 新架构 而后致力于 MySQL 的研究和优化
  • 2012年开始进入无线领域,目前负责闲鱼的无线和服务端开发团队

教育经历

浙江大学 数学与应用数学 2005年毕业

开源项目


MBMvc

MBMvc 就是Message Based MVC的简称

使M/V/C之间的交互全部通过消息机制来完成,不会相互引用,这样就不会因为有引用导致的各自生命周期的混乱

因为没有引用那么也会消灭由于循环引用导致的内存泄露和野指针导致的Crash

通过消息话也能使UI逻辑和业务逻辑异构,直接在不同的线程运行不会相互干扰使UI更流畅

而V/C 之间 也提供了数据Bind的方式达到完全解耦,相互的交互通过数据来驱动,不会有直接引用,从而解决有回调而导致的Crash或内存无法被及时释放的问题

而C/M 之间 也可以通过proxy的方式让 方法执行直接被消息化(有点象异步HSF的样子). 这样消息是可以被拦截并重放的,就可以很简单的作AOP(已经支持拦截器)


TDH_Socket

TDH_Socket是一个MySQL daemon plugin 类似于HandlerSocket(https://github.com/DeNADev/HandlerSocket-Plugin-for-MySQL)
现在TDH_Socket能接受客户端的TCP请求,并且直接通过MySQL的Handler层访问数据,绕开了SQL解析等一系列逻辑

TDH_Socket的Java客户端可以通过在客户端解析SQL的方式提供JDBC接口来提高易用性,并且也不会降低性能

TDH_Socket的一些特性和优点:

  1. 具有HandlerSocket的全部功能
  2. 连接复用,采用动态IO策略,只使用一个port进行通讯
  3. 进行DDL操作时不会hang住(可手动关闭被cache住的表)
  4. 支持流输出,对于大数量的返回,不会占用太多内存
  5. 易用
    • 不需要在一开始open_table,会在具体执行时open_table,被open的table还是会被当前线程cache住,下次请求不需要再次open
    • Java客户端(https://github.com/taobao/tdhs-java-client)
    • 支持JDBC,在客户端进行SQL解析
  6. 支持多线程的并发写操作
    • 默认情况下,对一个表的写操作都会在一个固定的线程被执行,从而避免可能的死锁
    • 也可以通过配置使一个表的写操作被多个线程并发执行,但是可能会导致死锁而进行回滚
    • 客户端可以将写请求发给指定的线程执行,可以在客户端那边在逻辑上保证不会死锁
  7. 读线程的动态调整
  8. 由于采用读写分开以及物理读和逻辑读的线程分开策略使在有大量物理读的时候也能提供比较高的性能
  9. 能对物理读进行流控