数据传输之RESTful

REST,全称表现层状态转移(Representational State Transfer), 指的是资源在网络中以某种表现形式进行状态转移,是一种架构风格。其描述的是在网络中Client和Server的一种交互形式。简单来说就是用HTTP URL来定位资源,用HTTP的各种method来描述操作。其关键的三个概念如下:

  • Resource: 资源,主要指的是数据。
  • Representational:数据的表现形式,如JSON、XML、HTML等。
  • State Transfer:状态变化, 通过HTTP method来描述。

REST经常被用来规范API的设计以及数据传输的格式,可以统一给各种客户端提供接口,包括Web、iOS、Android和其他的服务。REST不需要显式的前端页面,只需要按照格式返回数据即可。符合REST风格的API称为RESTful API,符合RESTFul规范的架构称为RESTful架构。如下图所示:

如何培养解决问题的意识

解决问题其实并不是最终的目的,需要加一个修饰词成为有效地解决问题,这才是最终的目的。那么如何有效地解决问题呢?这是有一些方法论做指导的。要培养解决问题的能力,需要首先掌握这些方法论。解决问题分为三步走:识别问题、分析问题、解决问题。

使用Spring Boot快速开发

Java开发中常用的Spring现在变得越来越复杂,越来越不好上手。这一点Spring Source自己也注意到了,因此推出了Spring Boot,旨在简化使用Spring的门槛,大大降低Spring的配置工作,并且能够很容易地将应用打包为可独立运行的程序(即不依赖于第三方容器,可以独立以jar或者war包的形式运行)。其带来的开发效率的提升使得Spring Boot被看做至少近5年来Spring乃至整个Java社区最有影响力的项目之一,也被人看作是Java EE开发的颠覆者。另一方面来说,Spring Boot也顺应了现在微服务(MicroServices)的理念,可以用来构建基于Spring框架的可独立部署应用程序。

Java开发框架之日志

日志在应用开发中是一个非常关键的部分。有经验的工程师能够凭借以往的经验判断出哪里该打印日志、该以何种级别打印日志。这样就能够在线上发生问题的时候快速定位并解决问题,极大的减少应用的运维成本。

微服务杂谈

这几年在Java工程师招聘时,会看到很多人的简历都写着使用了Spring Cloud做微服务实现,使用Docker做自动化部署,并且也会把这些做为自己的亮点。而比较有趣的这其中以小公司出来的人为绝大多数,大的公司出来的人简历上倒是很少提这些东西。

对于我自己来说,从15年就开始关注这一块,看过马丁.福勒最开始的关于微服务的论文、也看过不少对微服务的论证的英文文章和书,也研究过Spring Cloud、Sofa等开源实现以及Service mesh。考虑到我们公司研发团队人力不足、基础设施不完善,当初是没有推行微服务的。但随着看到上述的那种简历越来越多,有时候我也会疑问:难道真的不用微服务就落后了吗?公司的同事如果不掌握这些就真的没有竞争力了吗。而随着最近公司业务的逐步提升,研发人员越来越多,借着在梳理公司的微服务落地计划时,也梳理了一下微服务的相关知识点,也是本文的主要内容。

开篇之前先声明我对微服务的几点态度:

  1. 架构模式有很多,微服务不是唯一的选择也不是什么银弹。国内绝大多数中小公司引入微服务都是在盲目追新,也能看出做此种技术选型的工程师基础架构素质的不足。
  2. “你必须长的足够高才能使用微服务”。微服务基础设施,尤其是容器技术、自动化部署、自动化测试这些不完备,微服务形同虚设,不会带来什么质的提升。
  3. 微服务架构的关键不在于具体的实现,而在于如何合理地划分服务边界以及组织架构是否相匹配。不考虑研发团队的规模和组成就盲目上微服务是不良的技术选型。
  4. Spring Boot是Spring全家桶的上层封装,并不是什么崭新的技术,也不是什么值得觉得成为自己杀手锏的技术。
  5. Spring Cloud中Spring Cloud Netflix的组件是经过生产环境验证的,其他的则建议慎重选择。

技术 in Netflix

综合市面上的公开资料总结了Netflix在技术上面的一些实践和创新,从中能够得到不少启发和提示。

来自公司内部分享

技术面试的应该与不应该

进入软件开发这个行业差不多10年,做为候选人被面试过,也做为面试官面试过别人。这几年做为后者的角色越来越多,慢慢总结出来了一些技术面试的原则,也是自己在实践的一些原则。

缓存这些事

最新版本可见:https://github.com/superhj1987/pragmatic-java-engineer/blob/master/book/chapter5-datastore/cache.md

缓存是为了弥补持久化存储服务如数据库的性能缓慢而出现的一种将数据存储在内存中,从而大大提高应用性能的服务。如缓存五分钟法则所讲:如果一个数据频繁被访问,那么就应该放内存中。这里的缓存就是一种读写效率都非常高的存储方案,能够应对高并发的访问请求,通常情况下也不需要持久化的保证。但相对其他存储来说,缓存一般是基于内存的,成本比较昂贵,因此不能滥用。

缓存可以分为:本地缓存和分布式缓存。

我的2018

此文是我在部门内的一次公开信(经过脱敏),想法来自于《原则》和《谷歌是如何运营公司的》两本书。极度求真、 极度透明的原则是一个想要做出大事业的公司应该具有的气度,而对所有同事能够客观地陈述自己的得与失,并欢迎吐槽,这不仅仅是真诚文化、极度透明原则的体现,也是对自己的一种压力和驱动。