中台的概念从阿里17年开始提出来就快速成为了年度IT热词。阿里这样体量的企业的成功无疑论证了中台建设的正确性,让大家对于中台这样的解决方案跃跃欲试。而阿里顺理成章成为了中台的最好代言人,大家学习中台的榜样。那么什么是中台?事实上,对于中台的定义大家也一直在探讨中。阿里内部业务系统有其独有的特点,诞生其中的中台自然也带着阿里独有的特征,这一点从《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》这本书中我们也能读出来。直接复制阿里的中台方案真的能解决广大企业中的共性问题吗?可能未必,这应该也是当前大家关于数据中台有着各种各样的解读的原因。
Python性能优化二三事
随着机器学习的流行,Python近几年的热度一直在上升,再加上Python本身语言设计的简洁直观和易用,Python越来越得到开发者的青睐。但是我们却时常听说Python性能低,不如java,更比不上C。在这些抱怨背后到底是什么原因呢?Python真的性能低下吗?有没有什么优化的办法呢?
对于单纯的复杂计算过程,Python性能是比较低的,这是由于Python本身在设计时首要考虑的是如何快速完成工作(get things done),所以在性能上难免会有一定的牺牲。但是由于python和c有着非常好的互操作性,这类问题都可以通过实现一个c语言的版本来解决。当然从代码编写技巧的角度也有一定的优化空间,如果我们想做极致的性能优化,可以参考官方的性能优化技巧。
程序员需要知道的编译器知识
我们每天都在用某种编程语言写代码,但是我们真的了解它们是如何工作的吗?代码是如何转换为计算机可以识别的机器码的呢?
了解编程语言的工作原理,不仅可以让我们深入理解某一种编程语言,某些时候还可以帮助以一种更优雅的方式实现想要的功能。比如我们平时谈论很多的DSL(Domain Specific Language),在定义了DSL之后,我们如何做更进一步的支持呢?事实上我们还可以实现DSL的自动错误检查,还可以将其转化为某种可以执行的程序等等。还比如我们经常遇到的模式识别问题,状态机相关问题等等。对于这些问题,编程语言的实现原理可以给我们很多启示。
如何实现一个优雅的Python的Json序列化库
在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题。Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps
来将一个对象序列化。但是这种序列化仅支持python内置的基本类型,对于自定义的类,我们将得到Object of type A is not JSON serializable
的错误。
jasmine.any之坑
坑说:Jasmine
的any(Object)
不能替代any({premitive type})
,可以考虑使用anything()
坑位:使用toHaveBeenCalledWith
测试函数被调用时的参数。
当参数列表太长(如:func(p1, p2, p3){...}
)的时候,往往只需要验证某一部分参数正确性,这个时候使用any()
。
机器学习平台架构实践--面向对象设计
机器学习平台架构实践--配置管理
随着系统功能越来越多,系统的配置也越来越多,配置管理成为了一个重要的问题。做过线上运维的同学们一定对配置的复杂性有深刻体会,多少次加班都是因为一个配置不对而导致系统无法正常工作!配置问题由于难以建立有效的自动化测试而难以检测,常常使得我们不得不花费数小时甚至数天来调试才能找到配置上的问题。
对于分布式计算,这个问题变得更加突出了,熟悉分布式大数据处理的同学们对于分布式任务的复杂配置一定深有感触。分布式系统本身的复杂性常常使得单个组件的配置就有上百个。而在微服务架构流行的当下,我们的系统越来越多以分布式的形式出现,系统的配置管理问题也越来越突出。
本文尝试分享一下我们在构建机器学习平台时对于配置管理方面的设计实践。
极速软件发布的实现
在当下很多的应用场景中,我们常常会想要应用具有一定的灵活性,以便我们可以在线调整计算逻辑,而不需要重新发布应用。这可能也可以称为以极限的速度发布软件的方式。
AB测试
可以说解决了一部分这样的需求,使得我们可以在线的针对部分用户改变应用的行为。但AB测试
需要我们预先定义并实现两套逻辑,然后通过线上配置来应用不同的逻辑。显然,在可自定义的程度上,AB测试
是非常弱的。如果我们想要更大规模的调整应用的逻辑,AB测试
就不够了。
机器学习平台架构实践--微服务
一个项目越复杂,架构的作用就越显得重要。这就跟收拾家里面的东西一样,如果我们只有为数不多的几件物品,即便我们随意摆放,也不会妨碍我们找到想要的东西。但是随着购置的物品越来越多,如果不设置一套摆放规则,那么想找到东西就可能会花费大量的时间,效率低下。在我看来,架构就像这样一套摆放东西的规则。规则设置得好,屋子里面的东西将摆放得井井有条,我们的生活不仅将更高效也将更舒适顺心。
在最近的一个项目上,我们和客户一起建设了一个机器学习平台。对于某一个机器学习项目,最重要的四个部分是特征处理,模型探索,模型训练与模型推理。构建一个平台的目的是将这四个部分中通用的能力沉淀下来。一个成功的平台可以为新的机器学习项目提供基础设施,让项目快速起步,还可以使得项目组更专注在模型优化上而提升模型迭代效率。