2016年终自然记录总结
到自然去,去野,去观察,去感受。
Common misconceptions around microservices and APIs
对于微服务和API的一些误解:
- Misconception 1: Microservices are like web services but more fine grained
- Misconception 2: APIs are microservices
- Misconception 3: Microservices are the implementation of an API
API是接口,服务是组件,一个服务可以实现一个或者多个API。
从一起GC血案谈到反射原理
JAVA的方法反射导致perm满了,发生full gc。
我们知道Perm里主要存的是类的原始数据,比如我们加载了一个类,那这个类的信息会在Perm里分配内存来存储它的一些数据结构,所以大部分情况下,Perm的使用量和加载的类个数是关系很大的,当然Perm里在低版本的时候还会存一些其他的数据,比如String(String.intern()的情况)。
这个系统在JDK7下使用G1,而这个版本的G1只有在Full GC的时候才会对Perm里的类做卸载,该系统因为大量的请求导致G1 GC发生很频繁,同时该系统还设置了-XX:SoftRefLRUPolicyMSPerMB=0,那意味着SoftReference的生命周期不会跨GC周期,能很快被回收掉,这个系统存在大量的RPC调用,走的Xfire协议,对返回结果做反序列化的时候是走的Method.invoke的逻辑,而相关的method因此被SoftReference引用,因此很容易被回收,一旦被回收,那就创建一个新的Method对象,再调用其invoke方法,在调用到一定次数(15次)之后,就构建一个新的字节码类,伴随着GC的进行,同一个方法的字节码类不断构建,直到将Perm充满触发一次Full GC才得以释放
How I built an app with 500,000 users in 5 days on a $100 server
MVP阶段也要考虑扩展性,而不是留待后期解决,不然遇到高速增长就尴尬啦,语言和框架的选择要谨慎,例如:大的框架像ORM框架就容易带来性能问题。