内容来源:2017年5月13日,票牛网架构师黄亿华在“Java开发者大会 | Java之美【上海站】”进行《创业公司中的Java高效应用》演讲分享。IT大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。
阅读字数:2509 用时: 4分钟
Java是一门面向对象编程语言,不只吸取了C++语言的各类优势,还摒弃了C++里难以理解的多继承、指针等概念,所以Java语言具备功能强大和简单易用两个特征。Java语言做为静态面向对象编程语言的表明,极好地实现了面向对象理论,容许程序员以优雅的思惟方式进行复杂的编程。前端
有人说在互联网创业公司中不该该使用Java,让咱们来看看票牛网架构师黄亿华是怎么说的。程序员
t.cn/R9jbW3x
sql
在咱们公司初创的时候,组齐了三人的团队就开始作产品研发。当时整条业务线的东西都须要咱们本身写,要在短期内把东西作出来,效率是很是关键的。编程
咱们的产品模式自己实际上是须要验证的。创业有不少不肯定性,在上线以前没人能知道,咱们的一个项目究竟能达到多大的规模,能作到什么样。因此这时技术的重要性就在于快速把东西作出来。后端
咱们最终选择Java,一方面是由于咱们团队已经有了必定的写Java的基础,从最开始的搭建到后来初具规模也能Hold住,基数很稳;另外一方面是由于Java有很大的用户量,人才储备很是多,咱们看中了它规模化的能力。安全
从某种意义上来讲,Java的开发效率确实有些低。可是后来因为选型的缘由,咱们仍是坚持使用了Java。服务器
在“Java如何写得更方便易懂”这方面,Java一直在改进。以前的Java设计思想是模块之间要作到可扩展,崇尚配置和代码分离。架构
如今Java社区在向高效开发比较理智的方向去作,各类语言慢慢趋向一致。并发
咱们在使用Java 8以前都是用面向对象的方式去思考、去处置代码。框架
当时有人贴出了Java 8,用一个Lanbda能够从头写到尾,十几二十行的Lambda能作不少事情。
引入这个技术栈以后,咱们发现只要控制住适用的范围,它就是一个很是好用的东西。
我以为不管是作Web开发仍是服务端开发,都有一个很是经典的场景。在Java里咱们提倡分层,若是批量去作很容易写成下图中的代码。
这段代码的核心是Map,它要作的就是把两个对象进行转换,把一个List转换成另外一个List。
StreamAPI不单有编程方式上的提高,还能够在内部自行去作并发处理。
你们不用Java有不少缘由,好比运维以为它很难部署,架构师则会考虑第三方API在二次反射的时候是否能读到Java。
其实Java是主流的Java,只要还活着的开源项目基本上都已经支持Java。
SpringBoot到目前为止已经很是成熟了,咱们身边有不少最近才创业的朋友基本上用的都是这套技术栈。
它的特色是把Spring全家桶用一个看起来很简单美好的方式进行了整合,实际上它不是对Spring技术栈的重构,而是把Spring技术栈作了封装和组合。
如今的Spring全家桶更多了。针对Web开发,基本上能够完成所有的选型,并封装得很漂亮。
在2015年Spring Boot尚未那么火的时候,咱们作了一个相似的整合工做,用到了Spring 四、Spring MVC。
Spring4目前已经相对成熟稳定。Spring的发展经历了一个变动过程,从最开始的XML,在当时也算轻量级;到2.5的时候有了注解,简化了不少事情;在Java 3的时候加入了Spring Config。
Spring4相对于Spring 3加了一些Java 8的支持。
如图是MVC的一个例子。
咱们为了解决ORM使用繁琐的问题,本身写了Daogen。这个工具兼具了灵活性和规范性,它能够统一代码规范,强制作命名,并在编译期自动生成XML。
咱们当时引入Jade4j框架,借用前端基本在用的模版引擎,在前端用Js能够跑,后端用Java也能跑。
如今Java比较火的框架叫Thymeleaf,这个框架也很好。基于咱们想用前端来写模版,因此当时仍是选择了Jade4j。
在第一个版本上线以后,“从0到1”阶段完成,这时咱们又将面临不同的问题。
随着业务规模扩大,线上故障、可用性、质量不能忽略,团队也要扩张,并提出新的要求。要求主要是质量、可见性和可用性三个方面。
由于条件限制,咱们的招聘工做进行艰难。退而求其次,咱们会选择一些资质较好、主动性较强的应届生或一两年工做经验的员工作培养。
咱们须要构建一我的才梯队,以“一个带两个”的工做模式,把团队组织成一个有梯队的团队。
咱们是单代码仓库,当代码不断增长,前期又作了不少不清楚的模型或代码的时候,必需要去整理清楚。
我最大的经验就是重构不合理的业务模型,业务模型是最重要的。
Devops能够作线上的无缝发布,作版本的回滚重启。测试环境要高可用。
咱们如今用Cat最多的是报错功能。Java的错误机制仍是很完整的,若是出现什么线上问题,报错基本都能发现。咱们主要作了两件事,一是把全部异常都发报警短信,另外一件事是把全部异常放到一个电视机上,便于咱们随时监控。
性能评估是其次,毕竟QPS只有1。
ELK能够用于作日志收集、业务监控、性能监控,甚至能够用来作数据分析。
可是由于它的数据量特别大,对服务器的性能调优要求比较高,因此咱们最终只保留了日志管理功能。
任何公司都有报表需求,咱们的作法是跑个SQL把数据存下来而后给老板看。后期有些数据量较大,Mysql存储有压力,因此咱们就用了阿里云的ODPS。
懒是一种美德:技术选型上咱们选择更适合的,可能会提升开发效率或运营水平,但也可能不行。因此要去不断尝试,咱们以为这是值得的。咱们为了追求更高的生产效率,也会写不少的小工具。
找到实用和好奇心的平衡点:到了成天作业务的阶段,会以为枯燥。我以为技术团队应该是有追求的,在知足“吃本身狗粮的条件下”尝试新技术。这个平衡点是根据团队规模和人员对某个方向的了解水平来定。
对利用第三方平台:咱们团队能用别人的就尽可能不本身作。用第三方服务多少会有些问题,但在衡量之下确定会选择先把它作出来。
如图可见,在最初的时候单体应用的生产率更高,它有不少优势。
技术在创业过程当中相对来讲仍是比较肯定的因素。当各部门之间出现分歧的时候,要提升效率只能选择相信队友,因此快速失措快速迭代是很是重要的,而且要进行有效支援。
要提升效率依靠更好的开发工具;
质量由QA人员和运维把关,进行异常监控;
可用性和安全也要经过监控来保障。
今天要分享的就是这些,谢谢你们!