Posted in Java, 技术

fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

fast-framework


轻量级 Java Web 框架 – https://github.com/JeffLi1993/fast-framework

  • 基于 JDK 8 规范
  • 基于 Servlet 3.0 规范
  • 零配置
  • REST 服务接口 基于 JSON 传输
  • 目前提供 MVC … 解决方案

 

一、作者与学习乐园

源码地址:我的GitHub地址
作者: 李强强 也叫 泥瓦匠
QQ群:编程之美 365234583 立即加入

二、快速入门

1. 必备环境

2. 下载 fast-framework 项目及 sample 案例

git clone https://github.com/JeffLi1993/fast-framework.git

3. Maven 编译 sample 案例

cd fast-framework // cd 到工程根目录

mvn clean install // 编译工程

4. 启动 sample 案例

cd fast-sample // cd 到 sample 案例工程根目录
mvn jetty:run  // 启动 sample 工程

Console 出现如下结果,表示服务器成功启动:

...
[INFO] Started ServerConnector@f1a45f8{HTTP/1.1}{0.0.0.0:8080}
[INFO] Started @5133ms
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 10 seconds.

5. 访问 sample

在浏览器中打开:

http://localhost:8080/hello?name=BYSocket

会得到如下结果:
sample结果图

 

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

 

Posted in Java, 技术

图解微服务架构演进

图解服务化架构演进

许久没摘记了,继续告诫自己:

要静下心来,低调多做事

前言

来自dubbo的用户手册中的一句话:
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

常规的垂直应用架构就相当于传统的那种,现阶段传统垂直架构改造的核心就是对应用做服务化改造,服务话改造使用的核心技术架构就是分布式服务框架。

其实这篇是概念上的总结,技术概念软文,纪录此文让自己更明白什么是微服务化架构。

服务化架构演进

请看下图,也来自dubbo的用户手册,图中恰恰少了微服务架构的图。
image

那什么是微服务架构呢?
先从第一个图中第一个说起吧。

1.orm – 单一应用架构

我认为是一个高内聚版本,所有功能部署在一起。数据访问框架(orm)成为关键。这个架构很少被人使用,几乎接近灭绝了吧。

优点:成本低,适合功能少又简单 缺点:很多,比如无法适应高流量,二次开发难,部署成本高

2.mvc架构 - 垂直应用架构

当访问量渐渐增大,慢慢演化成用的很多的mvc架构。虽然还是所有的功能都是部署在同一个进程中,但是可以通过双机或者前置负载均衡来实现负载分流。这样应用也可以拆分成不同的几个应用,以提升性能和效率。

此时,mvc架构用于分离前后端逻辑。一方面,有一定的模块化。另一方面,加速和方便了开发。

3.rpc架构 - 分布式服务架构

当mvc垂直应用分成不同应用时,越来越多的情况下。不可避免的事应用a与应用b之间的交互。此时将核心和公共的 业务功能抽出来,作为单独的服务,并实现前后端逻辑分离。

此时则就需要提高业务的复用及整合的分布式rpc框架,例如dubbo等。

4.soa架构 - 流动计算架构

当rpc架构中的服务越来越多时,服务的生命周期的管控,容量的评估等各种问题会出现,使服务化成为瓶颈。需要增加一个调度中心来进行对服务管控,监督等。

然后,提到关键的 --

5.微服务架构

问:什么是微服务架构?

答:它就是将功能分散到各个离散的服务中然后实现对方案的解耦。服务更原子,自治更小,然后高密度部署服务。

下面是对微服务架构的图解:

image

小结

伴随敏捷开发,持续交付,DevOps,Docker等高速发展,微服务必然是未来演进方向。加油~ 多了解吧。

Posted in Java, 技术

五、网站高可用架构

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books


高可用架构

    主要手段:数据和服务的冗余备份及失效转移。

42b04b4f-0228-44e1-b0a0-9a6db3392de2

负载均衡通过心跳检测监控服务器不可用。

其机制,实现服务器可用实时监控,自动转移,心跳检测。利用负载均衡

906507aa-df96-4723-ba5c-fbbd7379d290

Session集群

1.Session复制

78d9fa72-eca3-4345-885e-e6560a254126

2. Session绑定

利用负载均衡的源地址Hash算法实现。

649f979a-b05e-45ee-a0cc-f546637ed0c7

3. 利用Cookie记录Session

3269f531-2bb7-4a15-bc9c-785683dff255

4.Session服务器

667425fb-2216-4704-9e23-39072659f52b

Posted in Java, 技术

四、瞬时响应:网站的高性能架构

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books

网站性能指标:响应时间吞吐量

网站性能测试

    不同视角下的网站性能

    用户视角的网站性能

    前端架构优化手段,通过优化页面HTML样式,利用浏览器的并发和异步特性,调整浏览器缓存策略,使用CDN服务,反向代理等手段。

    缓存加快数据读取,集群提高吞吐能力,异步消息加快请求响应及实现削峰

    建设优化骨干网,使用高性能服务器

测试指标

    响应时间,并发数,吞吐量(TPS QPS),性能计数器

前端性能优化

    1. 减少HTTP请求:合并css,合并js合并图片

    2. 使用浏览器缓存:HTTP头 Cache-Control 和 Expires

    3. 启用压缩:HTML CSS JS — GZip

    4. css 放在页面上面 js放在页面下面

    5. 减少Cookie传输

系统上层,三步走吧:缓存集群异步

分布式缓存架构

    JBoss Cache更新同步

b16e039d-8390-4f12-966c-2c547be393c7

    Memcached互不通信

9f36ed3f-63e0-4932-9775-46b3b00998d0

异步操作

1f20a927-c7da-47ec-a0ca-b28494de0b2a

代码级别

    1.多线程 : IO CPU

    2.资源复用

    3.数据结构

    4.GC

B+树

LSM树

HFDSb20a2432-ac65-4c08-92dd-c4702330ff27

5bb90e42-7b1d-4541-95ba-caa8e4c8ffec

acf281f2-92a1-4275-99f7-497cd8f10a8d

Posted in Java, 技术

三、大型网站核心架构要素

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books


软件架构,有关软件整体架构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

性能

    在浏览器端通过浏览器缓存页面压缩,合理布局页面,减少Cookie传输等改善性能。

    CDN反向代理服务器,缓存热点文件

    应用服务端,本地缓存分布式缓存(缓存的主从备份热备份

    代码层,多线程和改善内存管理

    数据库服务端,索引缓存SQL优化

可用性

    网站可用的主要的手段是冗余。多台服务器数据多台互相备份,任何一个宕机都不会影响应用的整体可用。

    对应用服务器,多台服务器通过负载均衡组成一个集群共同对外服务

    对于存储服务器,由于其上存储着数据,需要数据进行实时备份

    发布验证,自动化测试,自动化发布,灰度发布

伸缩性

    伸缩性是指通过增加服务器,缓解不断上升的用户并发访问和不断增加

    改进缓存路由算法保证缓存数据的可访问性

扩展性

   如何设计网站的架构使用其能快速的响应需求变化

    网站可扩展性架构主要手段:事件驱动架构分布式服务

安全性

    安全架构是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。

小结

    性能,可用性,伸缩性,扩展性和安全性是网站架构最核心的几个要素。

Posted in Java, 技术

二、大型网站架构模式

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books

网站架构模式

    分层

横向维度,每个部分负责单一的职责。上层对下层依赖和调用。

应用层,服务层和数据层

    分割

网站越大,不同功能和服务分割出来形成高内聚低耦合模块单元。

    分布式

分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。

数据在分布式环境中保持数据一致性非常难,分布式难以保证。

分布式应用和服务、分布是静态资源、分布式数据和存储、分布式计算、并发和协同的分布式锁。

Zookeeper 的典型的应用场景(配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等)

    集群

多台服务器部署相同应用,通过负载均衡向外提供服务。

    缓存

缓存就是放在离计算距离最近的位置以加快处理速度。

CDN:内容分发网络 、反向代理、本地缓存、分布式缓存。

缓存种类:1. LocalCache(独立式): 例如Ehcache、BigMemory Go 2. Standalone(单机)  3. Distributed(分布式):例如Redis-Cluster, memcache集群等等

    异步

一个重要目标和驱动力是降低软件耦合性。

一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。

单一服务器内部通过多线程共享内存队列方式实现异步:处理业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理。

分布式中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看做内存队列的分布式部署。

异步架构(生产者消费者模式),异步消息队列的特性:可用性,加快网站响应和消除并发访问高峰。

    冗余

数据库定期备份,存档保存,实现冷备份

数据库进行主从分离,实时同步实现热备份。

    安全

web安全 《白帽子讲安全》 吴瀚清

架构模式在新浪微博的应用

5d7cb605-6b21-4aaf-844a-fbc4a03bdd45

    异步推拉模式、多级缓存策略

小结

    好的设计绝对不是模仿,不是生搬硬套某个模式。


欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket

Posted in Java, 技术

一、大型网站技术架构演化

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books


大型网站系统的特点

  • 1、高并发,大流量
  • 2、高可用:7*24小时不间断服务,不宕机

  • 3、海量数据储存及管理

  • 4、网络复杂

  • 5、安全性

  • 6、易扩展,可伸缩:需求快速变更,发布频繁

  • 7、渐进式发展:脸谱网是宿舍,谷歌是斯坦福大学实验室,淘宝是马云家

一句话,高可用,高性能,易扩展,可伸缩且安全的网站。

大型网站架构演化发展历程

1、初始阶段

    单机服务器:应用程序+数据库+文件都在一台服务器上。

  • 2、应用服务和数据服务分离

    应用服务器,文件服务器和数据库服务器。

中间通过通信的是:HTTP/Socket

  • 3、缓存

    二八定律。核心集中在百分之20

    缓存分两种:应用服务器上的本地缓存 和 缓存在专门分布式缓存服务器的远程缓存

    其中Ehcache 简介:(通过RMIJGroupsJMS进行的异步或同步的缓存复制、支持的通过RMI、JGroups或JMS进行的异步或同步的缓存复制、可靠的分发:使用TCP的内建分发机制、面向资源的RESTful,还有就是SOAP)

  • 4、应用服务器集群

    集群是常用手段,实现系统的可伸缩性。

    通过负载均衡调度服务器,将请求分发任何一台服务器。

  • 5、数据库读写分离

    读部分(缓存不命中或者过期) 和 全部写操作要访问数据库

    主从热备-数据库同步

  • 6、反向代理nginx CDN加速网站响应

    原理:缓存

    CDN:就近的网络提供上机房。反向代理缓存这用户请求的资源。

  • 7、分布式文件系统分布式数据库系统

    单表数据规模很大的情况,常用手段是业务分库。

8、NoSQL搜索引擎

    数据存储及大规模数据的检索

    NoSQL场景: 场景:储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。

  • 9、业务拆分

    分而治之,业务分成各个产品线。然后各个应用服务器。

    应用之间通过超链接或者消息队列进行数据分发。

10、分布式服务

    SOA、云服务

小结

云计算服务,可以让一切技术资源:计算,存储,网络按需购买即可。

欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket

Posted in Java, 技术

[好文要转要收藏] UML类图几种关系的总结

在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

1.泛化(Generalization)

【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.

【箭头指向】:带三角箭头的实线,箭头指向父类

2.实现(Realization)

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现

【箭头指向】:带三角箭头的虚线,箭头指向接口

3.关联(Association)

关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

上图为自身关联:

4. 聚合(Aggregation)

【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

5. 组合(Composition)

【组合关系】:是整体与部分的关系.,没有公司就不存在部门 组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

6. 依赖(Dependency)

【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

各种关系的强弱顺序:

泛化= 实现> 组合> 聚合> 关联> 依赖

下面这张UML图,比较形象地展示了各种类图关系:

原文地址:http://blog.csdn.net/tianhai110/article/details/6339565

 

思考

在Java 各框架源码中,会涉及到各种

继承 = 实现> 组合> 聚合> 关联> 依赖

黑体字为常用