日前,四川长虹发布了 2016 年一季报,营业收入 154.08 亿元,同比增长 12.22%,归属于上市公司股东的净利润 2.16 亿元,同比增长 1148.64%,取得了“量增利倍涨”的大幅度提升,而反观国内一季度家电市场(彩电、冰箱、空调)整体零售规模则呈下跌之势。相较之下,长虹的营收规模和经营利润均出现大幅度的逆势反弹,自然引发全行业的广泛关注和热议。
长虹——这家老牌消费电子企业如何在激烈的竞争中持续保持优势的?近几年来,无论是计算机、黑白家电还是智能硬件领域,互联网文化都对市场造成了强烈的冲击,在这种必须与时俱进、不进则退的情况下,长虹又是如何应对的?针对这些问题,牛小七最近采访了长虹软件与服务中心(简称“软服”)基础能力服务平台研发负责人李玮和大数据平台负责人蒲文龙,一探长虹如何结合既有优势迎战新市场、新形势。
迎接互联网浪潮,传统企业中的「工程师文化」
迎接互联网浪潮,长虹进行了一系列改革,其中最重要的一部分,便是 2014 年 5 月长虹软服的成立,目前规模有 1000 人左右。长虹对软服的定位是打造互联网、物联网产品,担负起长虹智能产品的终端、云端软件研发任务,研发涵盖 TV 系统固件、Android 系统、移动 App、云端平台、大数据、安全等。
历经近两年的发展,软服被誉为长虹布局智能家电、智慧生活的“最强大脑”,自然离不开工程师团队的专业性,以及其后独特的技术文化。“我们软服的总经理刘东,总结出来我们的文化叫‘二进制文化’,他倡导的是‘开心生活,认真工作’、‘纵向行政管理、横向技术协同’、‘严肃认真、说一不二’的中心文化理念。”李玮如是说,“这种管理方式是与领导的个人魅力非常相关的。正因为这种鼓励员工积极讨论的管理方式,让员工在技术方面也积极贡献了很多有用的点子。”
具体来说,软服内部有各种技术培训,其中的很多培训是员工主动分享的。“如果听分享的人在 10 人以上,那么软服对分享者会有积分奖励,这个积分将贡献到每月及每季度的考核。此外,软服在每个技术方向上都成立了架构师团队,组内成员会提前进行研究,然后在自己的专业方向上内部分享和布道。因为长虹的经营范围较广,有电视、空调、冰箱、空气净化器等多个品类,带来很多不同种类的研发任务,所以分享的内容也会比较广。”
在任务协作方面,软服采用了 IBM 的 RTC 项目管理工具,可以以任务为单位,创建、跟踪、交流和管理这些任务。每个团队内部的开发流程都是敏捷开发,每天开短会的时候其他团队可以根据需要来参加,面对面地交流。在工作时,可以通过通讯工具来联络。每周五都会有一次技术分享会议。
在技术选型方面,是由架构师团队把握的。一共十多个技术方向,每个方向上有一个首席架构师和架构师团队。当做技术选型时,比如,一个项目涉及服务端 Java、Android 和 iOS 三个技术方向,那么这三个方向的架构师就会在一起做技术选型(这里说的技术选型只涉及技术架构,软服另有一个叫“应用与服务部”的部门专门来做业务架构)。
架构师要负责研究和评估新技术,并将其应用到项目实践中去。软服鼓励架构师参加各种 IT 行业的峰会,如云计算、大数据方面的会议,并将学到的知识应用到内部的项目中去,这也是架构师的业绩之一。但研究新技术和新的产品方向并不只是架构师的工作,作为团队中的研发人员同样可以向架构师提出和交流他的观点,架构师会考虑这些建议的。
此外,在软服,架构师并不只是单独的架构师,他们同时也是研发人员。对此,李玮解释“我们的研发人员中的‘牛人’一般会兼任架构组的成员。当架构师设计了架构以后,后面的研发过程他们也要跟踪,而且还要参与某个核心模块的编码工作和后续的代码审查。这样的组织安排保证了架构和研发不脱节,杜绝了‘PPT架构师’的出现。”
拥抱 Go 和 Docker 等新技术,构建技术栈
有了浓厚的技术文化,软服在追逐和构建技术栈方面也很有自己的观点和经验。以长虹启客智能电视的“带走看”功能为例。首先,用户打开电视机,启动长虹定制的 Android 系统。接着,用户打开点播功能,它其实是一个 Android 应用,它所连接的远程服务器端运行的是Java等平台。然后,点播了节目以后,用户使用手机上的启客TV应用的“带走看”功能,这里,用户的手机可以是 Android 手机或 iPhone,也就是说,这里也用到了 Android 或 iOS 平台的技术。在智能硬件方面用到了嵌入式开发。服务器端开发则主要用到了三种语言,一是 Java,二是 Node.JS(JavaScript),三是近来开始使用的 Go 语言。
服务端的 Java 栈使用 Java EE 和 Spring MVC、Spring data 等框架,数据库持久层用的是 MyBatis、 Hibernate 等,数据库用到了 Redis、MongoDB、MySQL 等主流技术体系。在实现高并发服务时,内部 RPC 调用采用了阿里的 Dubbo 分布式服务框架,Dubbo 框架内部用到了 ZooKeeper。另外,软服将许多传统的服务微服务化,让服务的发布周期变得更短,容错性和可伸缩性变得更好,也让团队间的协作变得更顺利。
软服用 Node.JS 来开发像门户网站这样的系统,实现前后端的分离。前端用 JavaScript 开发,后端用 Node.JS 来做业务逻辑的实现。熟悉 JavaScript 的工程师可以同时把握前后端的代码。
除了 Java 和 Node.JS 外,长虹软服去年开始选择了 Go 语言,其背后的原因是什么呢?“Java 技术平台,也就是 JVM 平台是比较成熟和丰富的,但是 Java 语言本身有自己的弱点。”李玮谈道。之所以选用 Go 语言,主要是看重 Go 在云计算方面的潜力。它可以代替 Java 的一部分工作,但对于长虹来说,使用 Go 并不是用它来代替 Java,而是想用它来做一些它更加擅长的东西,比如,用 Go 编写的服务来支持一些并发非常高的场景。另外,云平台,特别是容器云,80%的产品是用 Go 语言实现的,比如 Google 的 Kubernetes、CoreOS 的 etcd 等。现在各个公司推出的解决方案中, Go 语言用得不少。
在试用 Go 语言以后,长虹软服计划在今年年底正式让 Go 语言编写的服务端程序上线。目前已有两个小的业务在试用 Go,都是 Web Service 的开发。其中一个业务是短信。以前,短信的分发都只使用运营商的同一个账号。现在,长虹想为不同的应用做不同的分发。这个短信分发平台就是用Go语言开发的。期间,为了在团队中有效地培养出能应用 Go 语言的人才,软服多次与国内最早在生产环境中采用 Go 语言的七牛进行充分的探讨和交流,并组建一支 10 余人的中坚骨干团队,与七牛团队一起,进行为期 1 个月的封闭实战培训。“站在七牛的肩膀上”,软服团队少踩了许多坑,可以直接判断它应用在哪些领域上是 OK 的。在前面讲的两个 Go 语言实现的项目上轻车熟路,不需要从头开始摸索了,以后用 Go 语言代替一些 Java 的解决方案也让人信心满满。
除了引进了 Go 语言,软服对 Docker 容器技术也十分关注。但相对于 Go 语言来说,Docker 是更新一点的技术。早在 2014 年长虹就开始关注 Docker 技术,而对 Docker 的使用还不到一年的时间,更多的时间是在尝试使用它。“国内真正把 Docker 用在生产环境中的案例还是相当少的,除非是业务量比较小的公司。”李玮介绍道。比如有些创业公司,业务刚刚上线,则可能会在公有云计算平台上用 Docker 来部署。但大规模的 Docker 部署有很多问题需要解决。软服也只是把一些小业务跑在 Docker 上。比如有一个业务是用微信公众号来控制电视,这个业务被抽出来跑在了 Docker 里面。
目前,软服的有些开发和测试都已经在使用 Docker。Docker 的开发流程需要在开发阶段把软件做成一个 Docker 镜像,上线时就直接用 Docker 运行这个镜像。运行方式有两种,一种是用 Docker 官方的 Docker Swarm 集群,另一种是用 Docker 直接运行。为了保证那些运行在 Docker 上的业务的稳定性,目前的做法是让它单独运行在 Docker 上。它调用的数据库和服务都不是通过 Docker 来发布的。现在,单机版的 Docker 已经做得很稳定了,但是,生产环境下的问题在于跨主机的 Docker 容器之间的通信。软服内部正在尝试的解决方案是 Flannel 这种基于 Go 开发的 Docker 网络解决方案。Docker 网络这方面技术虽然比较多,但是还不确定哪些是成熟的可以用的,还在尝试的过程中。
虽然还不成熟,但 Docker 却被业界非常看好,李玮认为,这是因为 Docker 颠覆了软件的交付模式。它的出现让软件不再以源代码的形式交付,而是改成了可执行的应用程序和运行环境。它把运行时、软件包都打包在里面,迁移非常方便。运维人员只需要把软件包部署在任何一台有 Docker 环境的机器上就可以跑起来。这相对于传统的开发可以省不少事。
还有一个优势就是节省资源。为了做隔离,传统的虚拟化技术虚拟在硬件层面。一台物理机上跑多个虚拟机,每个虚拟机里都跑一个操作系统。这些操作系统都要消耗 CPU、内存和磁盘空间。但 Docker 是容器,不需要单独的操作系统,所以,如果部署的机器多的话,Docker 能节省的资源是很可观的。
虽然目前 Docker 在安全性方面饱受质疑,但在李玮看来,这主要是因为 Docker 比较新。一个技术不可能一出来就非常完美。Docker 的安全性问题在于它对资源的隔离没有虚拟化做得粒度那么细,但长虹是在企业内部服务器上小规模地部署 Docker,所以对安全性的要求实际上并没有那么高。李玮相信,它的潜力很大,有全球那么多聪明的程序员为它贡献代码,现在大家质疑的这些问题都会得到解决的。
云和大数据,助力长虹智慧生活
作为一家大型企业,长虹也有自己的一套“云平台”,但与市场上的公有云平台有区别,是 SaaS 层面的,承载着一些像用户、支付、消息这样的大体量内部服务,这些服务支撑了长虹的各种业务。以统一支付平台这个服务为例,O2O 里边的“购食汇”是一个生鲜电商,它用的就是长虹的支付服务。不过,也不排除将来长虹构建容器云的可能性。就目前而言,长虹在云平台的使用方面采用的是混合方案,将一些核心的业务放在自己的机房,而将并发访问量大的业务放在公有云平台上,以支撑和加速全国用户的业务访问。对于七牛云平台,长虹当前的业务里已经在接入数据存储服务,同时其他正在构建的业务也在研究和尝试使用其他服务的可能性。
由于长虹的智慧生活概念,贯穿于智能电视、空调、冰箱等各个领域,长虹软服数据服务部技术负责人蒲文龙详细讲述了长虹在数据方面的布局和应用情况。
数据服务所采集的数据源有用户行为偏好、终端设备运行状态、互联网公开数据(爬虫数据)等,目前的数据量是 PB 级别。整个平台采用 Lambda 架构,先采集数据,然后搬移至 Kafka 做数据清洗,再根据自定义的规则做过滤筛选和序列化,存入 HDFS,然后 ETL 到 Hive 建立数据立方。然后就可以根据业务,设计和运行实时计算和离线处理的算法了。
“有了数据服务,长虹启客电视可以根据儿童观看的节目数据,分析出个人爱好和兴趣。如果将该数据给予教育培训机构使用,就可以根据儿童的个体表现来设置教育课程,按兴趣爱好来因材施教。启客冰箱可以自动采集用户的饮食食材数据,分析饮食结构是否合理,提醒用户调节饮食结构,让用户实现自我健康管理。数据服务带来的价值,无形之中就给用户带来了更好的生活。”蒲文龙强调了数据对于长虹产品的价值。
作为一家五十多年历史的国企,长虹将本着与时俱进的精神,依托云计算和大数据,在“互联网+”的道路上锐意进取、开拓创新,不断带给用户更好的产品和体验。