Coder Social home page Coder Social logo

blog-old's People

Contributors

ratwu avatar wuhaoworld avatar wy-ei avatar xiangwan avatar

Stargazers

 avatar

Watchers

 avatar  avatar

blog-old's Issues

架构研究总结

参考资料

对软件架构设计的一些总结和理解
Java代码规范

总体目标

  1. 面向扩展编程:尤其是前端
  2. 打开黑盒子:使用uml图描述功能,流程,提高可维护性,减少逻辑大bug
  3. 基础设施丰富,可支撑各种功能: spring boot
  4. 各个微服务易维护,可重用、扩展: jhipster+自定义
  5. 标准化(流程化):使用gitlab flow进行代码管理
  6. 自动化:持续集成,持续交付:阿里云crp+容器服务
  7. 高可用:rds读写分离 mongo集群 reids集群

具体实践

面向扩展编程

微服务:在实现功能前,进行设计时,尽量考虑到扩展性。现在的六边形架构就很好,预留接口进行扩展。
前端:现在流行组件化,模块化,如果能做到可插拔可能会更好。

打开黑盒子

使用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

image

image

微服务内实践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)代码分发系统

5视图法设计步骤顺序进行:

1、逻辑架构 考虑软件功能性需求

2、开发架构 编码实现方面的问题

3、数据架构 不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计

4、运行架构 交互,质量,性能

5、物理架构 硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响

javascript中的this

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关键词

当使用new方式调用函数时,this指向新创建的对象。

 	function Person(name){
		this.name=name;
	}
	var person=new Person("向晚");
	alert(person.name)//向晚

apply(),call()调用模式

apply()接收两个参数,第一个是将被绑定到this的值,第二个是参数数组

	var num1=0;
	var func1=function(){
		 alert(this.num1);
	}
	var obj={num1:1};
	func1();//0
	func1.apply(obj);//1

jhipster入门demo

简介

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向导就会启动了,如图:

image

第一个选择很重要,项目类型要选择microservice application
image

后面的根据实际情况,选择就可以。失败了也没关系,删掉文件夹重新来过。

------生成成功后运行 ./mvnw 或者gradlew下载依赖包。

生成实体

jhipster是可以生成实体和实体的增删改查带分页的

运行yo jhipster:entity <entityName>来启动实体生成向导。

然后跟着向导输入信息。

生成microservie gateway

生成基础架构

继续运行:yo jhipster
第一个选择很重要,项目类型要选择*microservice gateway

这个时候如果还被gfw折磨,你应该考虑ss或者vpn了。

生成实体

运行yo jhipster:entity <entityName>来启动实体生成向导。

然后跟着向导输入信息。

此处需要注意:

1.询问是否选择存在的app时 选择

2.<entityName>需要时在app中生成过的

运行 jhipster registry

jhipster registry是一个基于spring cloud的配置中心,jhipster的微服务架构依赖此程序。

1 从github下载源码https://github.com/jhipster/jhipster-registry

2 cd 到解压目录 然后运行 ./mvnw或者gradlew 启动应用

运行效果如下
image

这个时候就可以启动app和gateway了。

cd到刚才存放microservice app的目录 运行./

cd到刚才存放microservice gateway的目录 运行./mvnw

然后打开浏览器见证奇迹
image

image

ヾ( ̄▽ ̄)ByeBye

微服务,spring cloud,jhipster介绍

内容提要

本文涉及以下内容:

  1. 微服务架构介绍
  2. spring cloud介绍
  3. jhipster架构介绍

#微服务架构介绍

微服务概念

微服务和SOA很相似,都是按照业务功能把系统拆分成一个一个的服务。比如电子商务系统拆分成订单服务,商品服务等,每个微服务都是自治的,可以单独部署。
微服务和SOA的区别是:微服务粒度更细,通信协议倾向于使用restfull api 而不使用webservice。
微服务有很多优点,包括松散耦合、自治服务、分散化治理以及易于持续交付等等。
微服务大的缺点是服务的可用性、数据的一致性等
微服务架构和单体应用架构对比:
![微服务架构和单体应用架构对比]

image

微服务架构技术关注点

首先看一个概览图:
image

从上图可以看出,主要分为交付和开发两个方面,微服务化后需要部署众多的独立程序,给运维带来了较大的压力,使用docker可以很好的解决这个问题。

现在主要说下开发方面的技术点

1 服务注册、发现、负载均衡,容错(服务注册中心->兼配置中心)
2 服务间的通信(消息模式,RPC模式)
3 api网关(路由,监控,安全认证,日志,限流)
4 微服务周边设施:日志中心,监控中心 ,文档自动生成,链路追踪系统

spring cloud介绍

Spring Cloud是Springframework里的一个项目,提供了开发分布式系统中比较常见的一些模式能力。其中配置管理(Config Server)、服务发现(Eureka)、服务熔断(Hystrix)、网关(Zuul)等是基于Netflix OSS的一个封装,利用Java注解(annotation)声明,可以在Spring Boot应用里便捷地使用Netflix的开源产品构建生产级可用的微服务应用

spring cloud架构图

image

jhipster介绍

jhipster是一个方便的代码生成工具。可以生成整套微服务架构项目基础代码,后端使用spring(spring cloud ,spring boot等),前端使用angularjs。
jhipster 还有两个重要的开源项目,

  1. jhipster-registry,基于 Spring Cloud Netflix Eureka 和 Spring Cloud Config,实现服务注册、发现,配置管理等
  2. jhipster-console,基于ELK,实现日志中心和监控中心。

jhipster架构图1:

image

jhipster架构图2:
image

jhipster各组件启动顺序

  1. 启动jhipster-registry --服务和网关依赖注册中心,如果不先启动注册中心,服务和网关启动不了。
  2. 启动jhipster-console--如果使用这个控制台的话需要优先于具体服务启动
  3. 启动具体服务--例如订单服务,商品服务。服务启动时会把自己注册到注册中心,方便别的服务或网关调用
  4. 启动网关--这里的网关指jhipster生成的gateway类型的项目,是一个基于angular的前端

参考文档:
0. jhipster中文网站

  1. 微服务架构介绍
  2. 微服务技术关注点
  3. spring cloud 各组件介绍
  4. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

本文涉及的开源项目介绍:

  • 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,实现日志中心和监控中心。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.