商业技术
商业技术主要有以下几个特点:稳定性、可扩展、兼容性和可运营性等,这里我们重点说可运营性这个特点。
又拍云的 CDN 服务在纯粹技术上理解,是内容分发的缓存系统,一款 CDN 产品。但是需要完成大量的工作,才有实现商业化的可能。
比如需要加入多个子系统,计费系统用于查询客户流量、带宽使用情况;运维系统负责节点、服务器等管理;日志系统负责在使用过程中排查系统问题。
过去围绕又拍云 CDN 系统,就有十多个子系统。去年又拍云增加了直播云功能,意味着又增加了五六个子系统。现在子系统已经有二三十个了。
另外两点是商业价值和市场价值。商业价值主要体现在如何为客户创造价值。
纯技
纯技的特点则主要集中在技术创新方面。
比如近期十分流行的 OpenResty 开源产品,技术创新性强、性能优异。与现在的 Node.JS、PHP 等相比,是占优势的。
纯技另一个特点是有趣,炫酷。纯技产品,本身技术性强,它诞生的原因也正是因为开发者觉得它的 idea 有趣。
我在 2010 年时,开发了一个 aLiLua 的开发框架,与 OpenResty 相同,只是我没有基于Nginx 编写。独立编写了 server,将其嵌入进去,形成 aLiLua 。
这是两种不同的方法。我认为我的方法更加酷炫、简单。因为我不需要依赖于 Nginx 和配置文件。后来我编写了一个更加简单的,性能更强劲的。
这个东西具备了炫酷、有意思的特点,但是由于它纯粹是按我的个人兴趣制作的,没有考虑商业技术方面的内容,不具备稳定性、扩展性、兼容性等。
我的初衷是希望为自身、业界创造价值,但到现在还只是我自己在用来写写网页、和做些数据统计分析的事,不过这取得了非常好的效果,省去了很多麻烦。在又拍云团队中有不少杂活要做的,大家一般都会使用 Go、Python,而我则使用 aLiLua 。
△ 商业技术与纯技区别
商业技术与纯技的代表类型
简单介绍几类商业技术与纯技的代表性产品。
第一类产品——操作系统
商业技术中有 Microsoft Windows 和 iOS ,纯技的有 Linux。
Windows 无论是操作还是硬件兼容性都十分优秀。但是 Linux 有时候甚至连驱动都很难找到。Linux 的优势在于标准的硬件,将服务器构建于 Linux 系统上则十分便捷安全,性能非常好。
第二类产品——数据库
商业的 Oracle 或 MS DB 的市场前景十分优秀。过去二三十年中,几乎所有国内金融机构都是用这两种产品。
为什么国内金融机构不使用纯技领域的 MySQL 或 Redis 的产品呢?
商业场景,数据安全性最为重要,其次是稳定性保障,MySQL 或 Redis 虽然也能做到,但是用户显然对专业的 Oracle 和 MS DB 更为信任。
第三类——语言类
商业语言包括:C#、Swift、Java 等,纯技领域有 PHP、Python,Perl 等。
国内技术人追求比较高,使用 PHP、Python 者较多,但是国外仍然有较多人使用 C# 和 Swift 。因为后两者的版本历史兼容性比 PHP、Python 强大很多,有利于版本迭代。
我从 2001 年开始使用 PHP,一直使用到现在的PHP7。每次 PHP 的大版本更新中均不会以兼容性为前提。如果原来的这套场景是基于 PHP4.3 开发的,那么很可能无法直接使用 PHP5、PHP6 升级。版本升级时,需要使用 PHP5、PHP6 重新编写不兼容的地方。
第四类——Web server
Java 有比较多的 Web server 使用场景,这里以微软的 IIS 为例。在 IIS 上可以运行 ASP、C#,尽管 IIS 运行量不多,但是它是一个商业服务的例子。在商业服务中, Web server最重要的是性能,但是近几年,它已经落后于纯技领域的 Nginx 和 Apache了。
第五类——硬件
技术领域不仅有软件,硬件也相当重要。比如商业领域常会使用 F5 负责负载均衡,但是在纯技领域则多用到 LVS 。尽管 LVS 在使用过程中会存在产生不稳定性,消耗 CPU和内存资源等问题,但是很多公司还是会选择 LVS,主要原因是因为 F5 成本过于高昂。
以上,便是我列举的在商业技术和纯技领域大家较多接触到的部分产品。商业技术与纯技有稳定性、性能等极端性的差异。我们需要根据自己的需求,以满足业务需求为最终目标,在技术选型、产品选型中做好决策。
如何进行技术选型?
创新
前段时间热议的支付宝生活圈与微信理财。这两个就是明显的错误创新。首先很多人不希望朋友知道他的存款数额和购买了哪些物品,所以支付宝和淘宝天然不适合做社交。在微信方面,由于通讯录中绝大部分是朋友,人们只习惯于把零钱存在微信,用于发红包等之类的。
创新需要考虑到客户真实需求,并且满足客户的需求。
性能
千万不要杀鸡用牛刀,比如有人用 C++ 写 Web 应用,虽然性能非常好,但是研发难度大,实现周期长。再比如有人用最好的语言做大数据分析,但是其实性能并不好。每个语言都有自己的特点,C 语言性能强适用于大数据场景,但是对开发者技术要求高,开发周期长。又拍云的日志分析集群使用的就是 C 语言,虽然只有四台机器,但是可以完全处理全网 50 个 TB 左右的日志,并且计算出 Top 1000 的访问 URL、流量、访问次数等。
同样使用 Java 编写的 ES 实时日志收集系统,系统性却能要差很多,50 台机器的集群,只能抽样处理 10% 到 20% 。ES 实时日志收集系统的优势在于比起C语言的系统要灵活,可以针对业务需求,选择不同的技术方案。
稳定性
OpenStack 中的 Ceph 存储集群的稳定性非常差,把它搭建起来,对外出售公有云服务是完全不可能的。企业级公有云的使命是创造商业价值,在做技术选型的时候,首先要考虑系统稳定性,做到安全可靠。
总的来说,公司的 CTO 、技术总监、架构师等在进行技术选型的时候,要做到正确创新,以及权衡好性能与稳定性。
总结:“做适合的事”
第一阶段:初创
这个阶段团队往往只有四五个人,产品还只是一个 idea ,这时我们不需要考虑产品的拓展性、开发难易度,只需要以最快方法将它以 demo 的形式实现,通过这个 demo 验证产品是否存在商业价值。
第二阶段:爆发
这个阶段我们需要顶住产品发展带来的技术压力,考虑分布式、热备容灾等问题。
第三阶段:稳定
在稳定阶段,需要完善前两个阶段的技术问题,以及开始技术迭代,从长远角度考虑公司、产品未来的发展。
又拍云初创的时候,团队管理后台、云存储 API 等大量底层都是使用PHP 编写的,底层存储系统是使用 Erlang 编写的,CDN 系统使用 Nginx+C 编写的。
当时选择 PHP 语言的是因为开发周期短,产品可以实现快速上线。仅仅半年的时间,产品 demo 就编写完成了。
到了 2014、2015 年爆发阶段,我们开始考虑分布式、热备容灾等问题。并且使用 Java 和 Erlang 语言重新编写了 API 系统。在测试权衡后,又选择使用 Nginx+Lua 编写的 API 系统。
现在又拍云的技术发展已经处于一个稳定阶段,我们更多考虑的是怎么偿还技术债务,开始思考如何节省资源、提高性能。以及从长远的角度思考未来的市场需要,应对新的变化。