Spring Boot 2系列(二十八):Spring Session 集成配合Redis实现Session集群共享

  Web应用的 Session 默认是由服务器容器(如:Tomcat)管理,当部署服务器集群时,会出现在服务器A登录后,再次访问被负载均衡转发到服务器B时会被要求重新登录,这对访问同一个域名站点用户来说是非常不友好的体验,登录服务器的 Session 无法被集群中的其它服务器共用, 这就是集群环境下的 Session 共享问题。

解决集群环境下的 Session 问题的思路基本有三种:
  1. 服务器 Session 复制:让集群中每台服务器都有其它服务器的Session, 这是服务器Session复制机制。
  2. 持久化 Session:自定义 Session管理实现,接管容器对Session的管理,把 Session 持久化提供公共使用,每次请求根据 SessionId到 Session 缓存服务器取 Session 进行判断。
  3. 在负载均衡服务器配置粘性 Session:即把同一个 Session 的多个访问始终绑定到同一台服务器,不推荐使用, 当该服务器宕机机就会出现 Session 丢失,没有利点集群的优势。

  目前行业广泛使用且推荐使用的是持久化Session,对Session 执行统一的存储和访问,实现 Session 在集群服务中的共享。

阅读更多

Spring Boot 2系列(二十七):Listener, Filter, Interceptor

  Listener 监听器,Filter 过滤器,Interceptor 拦截器是 Java Web领域非常重要的三大神器(组件),会经常使用到。

  关注这三个的知识点本篇不做描述,主要记录在Spring Boot框架中这三大组件的使用。

  前面文章也有提到:Spring事件监听,SpringMVC之HandlerInterceptor拦截器, Spring Boot实践系列(二十二):Web相关配置详解

  官方文档:Spring Boot -> Application Events and Listeners,Spring Boot -> Servlets, Filters, Listeners, Spring Boot -> Add a Servlet, Filter, or Listener to an Application

阅读更多

大型网站架构要素

在给系统做架构设计时,除了要考虑功能需求以外,还需要关注性能、可用性、伸缩性、扩展性和安全性这5个要素,可通过这些要素来衡量一个软件架构设计的优劣,判断其是否满足需求。

阅读更多

大型网站架构演化历程

大型网站应用是随着业务的扩张发展从小型网站演化而来,适合的架构才是最好的架构,满足业务需求,没有资源浪费。在互联网行业,技术为业务服务,架构演进由业务需求驱动。

阅读更多

Linux命令(六):ls,grep,wc组合命令统计目录下的文件数

Linux下的 ls、grep、wc 三个命令可组合成统计目录下文件及文件夹的个数

统计当前目录下文件的个数(不包括目录)
$ ls -l | grep “^-“ | wc -l

统计当前目录下文件的个数(包括子目录)
$ ls -lR| grep “^-“ | wc -l

查看某目录下文件夹(目录)的个数(包括子目录)
$ ls -lR | grep “^d” | wc -l

命令解析:

ls -l
每一行对应一个文件或目录(目录、链接、设备文件),ls -lR是列出所有文件,包括子目录。
drwxr-xr-x 10 root root 4096 Mar 30 00:57 bower_components
-rw-r–r– 1 root root 505 Mar 30 00:52 bower.json
第一位是d表示目录(directory),是-表示普通文件。

grep “^-“
过滤ls的输出信息,只保留一般文件,只保留目录是grep “^d”。

wc -l
统计输出信息的行数,统计结果就是输出信息的行数,一行信息对应一个文件,所以就是文件的个数。

阅读更多

业务实践系列(3):项目重构思路

重构了一个项目,项目相对复杂,对外提供了很多接口产品给第三方调用,也调用多个第三方的数据,数据结构各种格式都有,业务有用户、登录、产品、订单、预付费/扣费、报表、客户、财务、对账等十多项服务。由单一架构拆分成多个Spring Boot微服务,Spring Cloud做服务管理。

重构后的项目也许在架构上仍存在缺陷,但比之前的单一架构则有较大的改进,非常方便横向扩展,大大降低了业务系统之间的耦合。本篇记录下重构的思路。

重构的目的主要是解决问题,如果问题不存在则重构没有意义,如果重构没有解决问题那更没有意义还浪费资源带来不可预知的风险,主要问题有:

  • 架构开发效率低,业务高耦合,难以扩展,不适合现在的业务体系。
  • 系统功能和性能遇到了瓶颈,难以支撑高速扩展的业务。
  • 代码不规范,难以理清逻辑,改动风险大,代价高。  
阅读更多

Spring Boot 2系列(二十五):WebSocket详解与使用

  Spring Boot为内嵌的Tomcat 8.5,Jetty 9和Undertow提供了 WebSockets 自动配置。 如果打包 war 文件部署到独立容器,则Spring Boot会认为容器负责其对WebSocket支持的配置。

  Spring Framework提供了丰富的WebSocket支持,可以通过spring-boot-starter-websocket模块轻松的集成使用。

  Spring Boot -> WebSockets, Spring Framework -> Web on Servlet Stack -> WebSockets

阅读更多