xiangwan / blog-old Goto Github PK
View Code? Open in Web Editor NEWThis project forked from wuhaoworld/github-issues-blog
个人博客
This project forked from wuhaoworld/github-issues-blog
个人博客
微服务:在实现功能前,进行设计时,尽量考虑到扩展性。现在的六边形架构就很好,预留接口进行扩展。
前端:现在流行组件化,模块化,如果能做到可插拔可能会更好。
使用uml图,描述功能、流程,提高可维护性,减少逻辑大bug
共享代码库要稳定 尽量对修改封闭,对扩展开放。
使用spring boot集成的各种功能,例如spring cloud , spring mvc ,spring data(包括 sql,nosql),spring sucrity等。
使用当当网开源的 elastic-job进行任务调度程序开发。
使用整合 elk 后的 jhipster-console 作为日志中心
Apache Commons 项目
Google Guava
immutables
Lombok使用注解编译时生成样板代码
传输协议,数据格式确定后尽量遵守开放封闭原则。
赞成各微服务有微量代码冗余。
技术栈基于 jhipster
微服务内实践ddd,采用ddd的分层架构例如领域服务)、领域事件,以及ddd的通用语言和限界上下文,cqrs仍在观望。
微服务间通信,两种模式rpc和mq消息。
spring cloud的rpc选择简单易用的restfull 。
需要公开接口的微服务提供rest api sdk,例如基于 feign,api消费者自由选择是否选用。
微服务间使用mq消息通信可基于深度封装的Spring Cloud Stream,spring cloud stream的优点是解耦了技术实现和具体mq实现的概念间的耦合,不再需要关心例如rabbitmq的队列、交换机,路由键等等的概念。
标准化从代码管理方面来说,可以实践gitlab flow,帮助标准git操作+review。
持续集成、交付基于aliyun code+crp+容器服务+docker,实现自动化部署。
sql数据库配置读写分离,nosql数据库(mongo,reids等)配置集群
运行期质量属性包括 性能 、安全性、易用性、可靠性、互操作性、鲁棒性(稳定性)、可伸缩性
开发期质量属性包括 易测试性、可扩展性、易维护性、可重用性、可移植性、易理解性
1)Web前端系统
2)负载均衡系统
3)数据库集群系统
4)缓存系统
5)分布式存储系统
6)分布式服务器管理系统
7)代码分发系统
1、逻辑架构 考虑软件功能性需求
2、开发架构 编码实现方面的问题
3、数据架构 不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计
4、运行架构 交互,质量,性能
5、物理架构 硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响
hello world !
this是Javascript语言的一个关键字。
它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
函数在不同的执行环境中this的值也跟着不同。
分一下四种
当函数作为对象的方法调用时,this指向该对象
var num1=0;
var obj={};
obj.num1=1;
obj.func=function(){
return this.num1;
}
alert(obj.func());//1
当函数直接调用时,this指向全局对象window。
var num1=0;
var func=function(){
return this.num1;
}
alert(func())//0
当函数内部的函数用普通调用方式调用时,this仍指向全局对象window。
var num1=0
var obj={};
obj.num1=1;
obj.func1=function(){
var num1=2;
var that=this;
var func2=function(){
alert(this.num1);//0
alert(that.num1);//1
alert(num1);//2
}
func2();
}
obj.func1();
当使用new方式调用函数时,this指向新创建的对象。
function Person(name){
this.name=name;
}
var person=new Person("向晚");
alert(person.name)//向晚
apply()接收两个参数,第一个是将被绑定到this的值,第二个是参数数组
var num1=0;
var func1=function(){
alert(this.num1);
}
var obj={num1:1};
func1();//0
func1.apply(obj);//1
jhipster简单来说是一个基于nodejs+yeoman的java代码生成器。往大了说是基于java的一套微服务解决方案。请注意是一整套的微服务解决方案。jhipster在整个程序架构上都做好了整合,包括前端mvvm框架(angularjs),前端构建工具(gulp)到后端的微服务框架(spring cloud)和hibernate/mongodb,再到单元测试/ui测试。
毫不客气的说 :学会了这套框架,你就是程序开发/程序架构界的潮男。对,hipster的意思就是:追求新奇的人。
下面跟着我来一步一步的来见证奇迹。
1.安装nodejs。
2.安装yeoman/bower/gulp npm install -g yo bower gulp-cli
3.安装jhipster npm install -g generator-jhipster
是不是被gfw艹翻了?哈哈哈
#生成mciroservice app
cd到你想存放代码的路径,然后运行:yo jhipster
这时候jhipster向导就会启动了,如图:
第一个选择很重要,项目类型要选择microservice application
后面的根据实际情况,选择就可以。失败了也没关系,删掉文件夹重新来过。
------生成成功后运行 ./mvnw 或者gradlew下载依赖包。
jhipster是可以生成实体和实体的增删改查带分页的
运行yo jhipster:entity <entityName>
来启动实体生成向导。
然后跟着向导输入信息。
继续运行:yo jhipster
第一个选择很重要,项目类型要选择*microservice gateway
这个时候如果还被gfw折磨,你应该考虑ss或者vpn了。
运行yo jhipster:entity <entityName>
来启动实体生成向导。
然后跟着向导输入信息。
此处需要注意:
1.询问是否选择存在的app时 选择是
2.<entityName>
需要时在app中生成过的
jhipster registry是一个基于spring cloud的配置中心,jhipster的微服务架构依赖此程序。
1 从github下载源码https://github.com/jhipster/jhipster-registry
2 cd 到解压目录 然后运行 ./mvnw或者gradlew 启动应用
这个时候就可以启动app和gateway了。
cd到刚才存放microservice app的目录 运行./
cd到刚才存放microservice gateway的目录 运行./mvnw
ヾ( ̄▽ ̄)ByeBye
本文涉及以下内容:
#微服务架构介绍
微服务和SOA很相似,都是按照业务功能把系统拆分成一个一个的服务。比如电子商务系统拆分成订单服务,商品服务等,每个微服务都是自治的,可以单独部署。
微服务和SOA的区别是:微服务粒度更细,通信协议倾向于使用restfull api 而不使用webservice。
微服务有很多优点,包括松散耦合、自治服务、分散化治理以及易于持续交付等等。
微服务大的缺点是服务的可用性、数据的一致性等
微服务架构和单体应用架构对比:
![微服务架构和单体应用架构对比]
从上图可以看出,主要分为交付和开发两个方面,微服务化后需要部署众多的独立程序,给运维带来了较大的压力,使用docker可以很好的解决这个问题。
现在主要说下开发方面的技术点
1 服务注册、发现、负载均衡,容错(服务注册中心->兼配置中心)
2 服务间的通信(消息模式,RPC模式)
3 api网关(路由,监控,安全认证,日志,限流)
4 微服务周边设施:日志中心,监控中心 ,文档自动生成,链路追踪系统
Spring Cloud是Springframework里的一个项目,提供了开发分布式系统中比较常见的一些模式能力。其中配置管理(Config Server)、服务发现(Eureka)、服务熔断(Hystrix)、网关(Zuul)等是基于Netflix OSS的一个封装,利用Java注解(annotation)声明,可以在Spring Boot应用里便捷地使用Netflix的开源产品构建生产级可用的微服务应用
spring cloud架构图
jhipster是一个方便的代码生成工具。可以生成整套微服务架构项目基础代码,后端使用spring(spring cloud ,spring boot等),前端使用angularjs。
jhipster 还有两个重要的开源项目,
jhipster架构图1:
参考文档:
0. jhipster中文网站
本文涉及的开源项目介绍:
Netflix ribbon 可以实现进程内(客户侧)负载均衡,配合netflix eureka 可以实现动态服务列表
Netflix eureka Eureka是一个服务注册表,由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。
Netflix Hystrix 通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包(request collapsing,即自动批处理,译者注),以及监控和配置等功能。
Netflix zuul Zuul 是提供动态路由,监控,弹性,安全等的网关服务
Spring Cloud Sleuth 分布式链路跟踪,基于 Twitter Zipkin
spring-cloud-netflix 该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)等。
jhipster-registry,基于 Spring Cloud Netflix Eureka 和 Spring Cloud Config,实现服务注册、发现,配置管理等
jhipster-console,基于ELK,实现日志中心和监控中心。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.