创业公司中的Java高效应用


内容来源:2017年5月13日,票牛网架构师黄亿华在“Java开发者大会 | Java之美【上海站】”进行《创业公司中的Java高效应用》演讲分享。IT大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。
阅读字数:2509 用时: 4分钟


摘要

Java是一门面向对象编程语言,不只吸取了C++语言的各类优势,还摒弃了C++里难以理解的多继承、指针等概念,所以Java语言具备功能强大和简单易用两个特征。Java语言做为静态面向对象编程语言的表明,极好地实现了面向对象理论,容许程序员以优雅的思惟方式进行复杂的编程。前端

有人说在互联网创业公司中不该该使用Java,让咱们来看看票牛网架构师黄亿华是怎么说的。程序员

嘉宾演讲视频和PPT地址

t.cn/R9jbW3x
sql

从0到1

在咱们公司初创的时候,组齐了三人的团队就开始作产品研发。当时整条业务线的东西都须要咱们本身写,要在短期内把东西作出来,效率是很是关键的。编程

咱们的产品模式自己实际上是须要验证的。创业有不少不肯定性,在上线以前没人能知道,咱们的一个项目究竟能达到多大的规模,能作到什么样。因此这时技术的重要性就在于快速把东西作出来。后端

Why Java?

咱们最终选择Java,一方面是由于咱们团队已经有了必定的写Java的基础,从最开始的搭建到后来初具规模也能Hold住,基数很稳;另外一方面是由于Java有很大的用户量,人才储备很是多,咱们看中了它规模化的能力。安全

从某种意义上来讲,Java的开发效率确实有些低。可是后来因为选型的缘由,咱们仍是坚持使用了Java。服务器

更有效率的Java

在“Java如何写得更方便易懂”这方面,Java一直在改进。以前的Java设计思想是模块之间要作到可扩展,崇尚配置和代码分离。架构

如今Java社区在向高效开发比较理智的方向去作,各类语言慢慢趋向一致。并发

Java 8

咱们在使用Java 8以前都是用面向对象的方式去思考、去处置代码。框架

当时有人贴出了Java 8,用一个Lanbda能够从头写到尾,十几二十行的Lambda能作不少事情。

引入这个技术栈以后,咱们发现只要控制住适用的范围,它就是一个很是好用的东西。

我以为不管是作Web开发仍是服务端开发,都有一个很是经典的场景。在Java里咱们提倡分层,若是批量去作很容易写成下图中的代码。


这段代码的核心是Map,它要作的就是把两个对象进行转换,把一个List转换成另外一个List。

StreamAPI不单有编程方式上的提高,还能够在内部自行去作并发处理。

你们不用Java有不少缘由,好比运维以为它很难部署,架构师则会考虑第三方API在二次反射的时候是否能读到Java。

其实Java是主流的Java,只要还活着的开源项目基本上都已经支持Java。

Spring Boot

SpringBoot到目前为止已经很是成熟了,咱们身边有不少最近才创业的朋友基本上用的都是这套技术栈。

它的特色是把Spring全家桶用一个看起来很简单美好的方式进行了整合,实际上它不是对Spring技术栈的重构,而是把Spring技术栈作了封装和组合。

如今的Spring全家桶更多了。针对Web开发,基本上能够完成所有的选型,并封装得很漂亮。

在2015年Spring Boot尚未那么火的时候,咱们作了一个相似的整合工做,用到了Spring 四、Spring MVC。

Spring 4

Spring4目前已经相对成熟稳定。Spring的发展经历了一个变动过程,从最开始的XML,在当时也算轻量级;到2.5的时候有了注解,简化了不少事情;在Java 3的时候加入了Spring Config。


Spring4相对于Spring 3加了一些Java 8的支持。

Spring MVC


如图是MVC的一个例子。

ORM:Mybatis+Daogen

咱们为了解决ORM使用繁琐的问题,本身写了Daogen。这个工具兼具了灵活性和规范性,它能够统一代码规范,强制作命名,并在编译期自动生成XML。


Server Side Rendering

咱们当时引入Jade4j框架,借用前端基本在用的模版引擎,在前端用Js能够跑,后端用Java也能跑。

如今Java比较火的框架叫Thymeleaf,这个框架也很好。基于咱们想用前端来写模版,因此当时仍是选择了Jade4j。

从1到N

在第一个版本上线以后,“从0到1”阶段完成,这时咱们又将面临不同的问题。

随着业务规模扩大,线上故障、可用性、质量不能忽略,团队也要扩张,并提出新的要求。要求主要是质量、可见性和可用性三个方面。

团队扩张

由于条件限制,咱们的招聘工做进行艰难。退而求其次,咱们会选择一些资质较好、主动性较强的应届生或一两年工做经验的员工作培养。

咱们须要构建一我的才梯队,以“一个带两个”的工做模式,把团队组织成一个有梯队的团队。

质量-重构

咱们是单代码仓库,当代码不断增长,前期又作了不少不清楚的模型或代码的时候,必需要去整理清楚。

我最大的经验就是重构不合理的业务模型,业务模型是最重要的。

质量-持续交付

Devops能够作线上的无缝发布,作版本的回滚重启。测试环境要高可用。

可用性-应用监控


咱们如今用Cat最多的是报错功能。Java的错误机制仍是很完整的,若是出现什么线上问题,报错基本都能发现。咱们主要作了两件事,一是把全部异常都发报警短信,另外一件事是把全部异常放到一个电视机上,便于咱们随时监控。

性能评估是其次,毕竟QPS只有1。

可见性-日志管理


ELK能够用于作日志收集、业务监控、性能监控,甚至能够用来作数据分析。

可是由于它的数据量特别大,对服务器的性能调优要求比较高,因此咱们最终只保留了日志管理功能。

业务可见性-报表

任何公司都有报表需求,咱们的作法是跑个SQL把数据存下来而后给老板看。后期有些数据量较大,Mysql存储有压力,因此咱们就用了阿里云的ODPS。

一些心得

如何作技术选型

吃本身的狗粮:在咱们团队是真正作开发的人来选型,不是由老板决定。或许大公司的选型是“自上而下”,而咱们团队是“自下而上”的,这一点更适合创业公司。

懒是一种美德:技术选型上咱们选择更适合的,可能会提升开发效率或运营水平,但也可能不行。因此要去不断尝试,咱们以为这是值得的。咱们为了追求更高的生产效率,也会写不少的小工具。

找到实用和好奇心的平衡点:到了成天作业务的阶段,会以为枯燥。我以为技术团队应该是有追求的,在知足“吃本身狗粮的条件下”尝试新技术。这个平衡点是根据团队规模和人员对某个方向的了解水平来定。

对利用第三方平台:咱们团队能用别人的就尽可能不本身作。用第三方服务多少会有些问题,但在衡量之下确定会选择先把它作出来。


如图可见,在最初的时候单体应用的生产率更高,它有不少优势。

技术角色和创业公司的分工

技术在创业过程当中相对来讲仍是比较肯定的因素。当各部门之间出现分歧的时候,要提升效率只能选择相信队友,因此快速失措快速迭代是很是重要的,而且要进行有效支援。

发现当下的问题

要提升效率依靠更好的开发工具;

质量由QA人员和运维把关,进行异常监控;

可用性和安全也要经过监控来保障。

今天要分享的就是这些,谢谢你们!

相关文章
相关标签/搜索