PHP 也可以一样快速实现 MS,Slim, Sliex, ZF, Symfony 都不错, API Gateway,Auth 单独作为服务,找一些成熟的方案(不管他是用什么技术去实现)就行了,配合容器技术实现 MS 一样很容易。
Spring Boot 有点过,自动配置加载太多东西,自动配置的大部分 Bean 都用不到,一半以上的系统资源被浪费掉了。
Spring 5 出来后,可能还是传统的手动配置好些, 几行代码就可以启动 Embedded Server。
通过个人代码比较,不使用 Boot,启动和系统资源都至少减半,Reactive Stream 很适合 REST APIs 开发。
https://github.com/hantsy/spring-reactive-sample@
WispZhan 里面也包括 Kotlin 程序,kotlin-gradle 是纯手动配置,gradle 脚本也是 Kotlin 写的, 不用 Boot,不用 Annotation,用 Spring 5 中的 BeanDefinitionDSL, RouterFnctionDSL 扩展。
Spring Cloud,如果你不用容器,它的确看起来不错。但是如果嫌 Boot 大,加上 Cloud 后,你会发现每一个 MS 服务都是庞然大物了。两年前一个项目,做过大量的 Research,最终我们放弃其核心的组件 ,因为大部分功能都是可以用容器实现,仅使用其中少部分组件,比如日志收集等,而 Cloud 中核心功能 Service Discovery,Load Balance,Failure Retries,Gateway/proxy 全部由容器去负责,这样应用轻量得多,容器的特性也充分利用,整个项目的 DevOps 也上来了。
当然国内看到不少开发使用 Spring Cloud 去实现**微服务**,仅仅在写代码层面,管理层面,运维都是老一套,还在用人肉上线,这样 MS 实施让人器笑不得。微服务不仅是写代码实现功能,DevOps 显得尤其重要,公司组织文化也应该随之变化。
还有一个最大误区,谈及微服务的时候,国内总是什么语言和框架挂上勾。微服务的特性决定了,每个服务有相对的独立性。一些成功的微服务转型案例,没有哪一个是一种语言或框架去实现的。基本都是各种技术(语言,框架)混搭,利用各技术最优秀的一面去实现相应的功能,如用中药一样,利用其偏性,各种药材放一起来解决问题。