Golang代码结构

Go的设计思想是代码至上,依赖于代码而不是象其它语言依赖于编译好的库。尽管go的版本号已经到1.8.1了,但是还没没有好的package版本管理策略。1.6推出的vender只是稍微缓解了困境,只有寄希望与将来的1.9版本了。Go的代码结构不同于其它语言的地方,以java为对照: 代码文件位于src目录 假如GOPATH对应项目goprojectstruct,代码文件应该处于 goprojectstruct/src目录内. Go无class的概念 Go无对象编程的类class的概念。所以代码文件名称可以随意定义,但是一般位于package目录,一般与package同名,但是拆分成几个文件也是可以的。 代码文件/package …

微服务的粒度

得益于nginx等反向代理的流行以及metrics/endpoit规范的成熟。微服务的理念开始流行了。 但是微服务究竟要多"微"才合适?以下是我的个人实践。 不能按接口分: 这样的粒度太细.比如新增订单/查询订单分为两个microservice,优点是可以根据各自的负载合理分配服务器 资源。缺点是microservice数量过多,这样拆分的话,至少存在几十个service,这样对service的依赖关系,监控 /部署都增加很大的难度。 不能按数据库表名(table)分: 这是个鲁莽的做法。很明显,数据库的的事务处理将极为棘手。 不能按数据库名(db)分: 这样的粒度太粗.好处是本地数据库数据一致性问题很好解决。缺 …

stateless server 最佳实践

stateless server 即无状态服务。相对与传统的http server存在session,无session的 http server称为stateless server,现在一般应用于restful service. Why: session的概念存在这么多年,一定有其合理之处,为什么要抛弃它? session的起源: session根源于http的cookie. http协议本身是无状态的协议,server是一问一答,答后不管。为了加入 状态,来辨识是否访问/是否登录的需要,加入了cookie。服务器的session就是对应浏览器端的cookie. 为什么抛弃session: 高并发的访问,session制约 …

Grails框架介绍

Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。其官方网站上的煽情介绍为:The search is over!, 即为不要再苦苦寻找web开发框架了,Grails是终结者。 如果web项目组大部分懂java,又没有旧的web项目负担。Grails是明智的选择。 缺点: groovy是类java的脚本解释动态语言,尽管其兼容java所有语法,最终也运行于JVM,但是速度有所影响.总体grails 比rails快,慢于传统ssh(struts/spring/hiberate)框架. 除了稍慢的运行速度,grails相 …

Gradle 介绍

gradle 现在已经2.1版本了。从1.0版本就一直关注这个groovy项目,但是没有应用到 公司项目的打算,但是现在时机到了。gradle已经是最好的java自动构建工具,没有之一。 一、gradle基于动态语言groovy groovy是java的动态版,闭包的特性让其编译脚本更加自由。 比如你可以指定项目的某个目录用特定jdk版本编译。 二、gradle 可以完全利用已有的maven库资源 maven库资源已经发展非常成熟,几乎没有找不到的开源库。 三、gradle插件非常丰富,已经支持android项目构建。 没错,你现在可以用gradle一个命令实现android项目的编译,打包,上传,运行。 插件: …