大型网站架构演化历程

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

阅读更多

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

阅读更多

前端分页组件-集成jqPaginator插件

  一个开发团队里如果没有前端工程师,或项目里如果没有做前后端分离,或仍在使用JSP, 那 Java后端工程师必要负责前端的开发,可以算半个前端工程师。

  在前端的列表页面经常要用到翻页, 就需要用到翻页插件, 对后端工程师来说,直接引用开源成熟度高的、美观的分页插件是个高效的选择。

  jqPaginator简洁、高度自定义的jQuery分页组件,适用于多种应用场景, GitHub

阅读更多

Spring Context Utils 获取上下文中的 bean

在使用多线程环境时,有些对象不是拖管在 Spring 容器中,但需要拿到 Bean 资源,是无法通过注入的方式的,就需要通过外部工具类来获取 Spring 上下文,再获取 Bean。

阅读更多

MyBatis:不同类型的日期时间入参的范围查询

  最近做报表统计,对日期时间范围查找的比较多,经常会遇到,也有些之前涉及相关的零散笔记,现整理如下。

  MyBatis 在接收日期时间参数进行日期时间范围查询时,有些需要注意的地方,例如日期时间参数的数据类型可能是DateString类型,或传参与数据库存储的日期时间格式并不一致等情况。

  此情况更多与 SQL 的字符串拼接或日期时间格式转换有关。

阅读更多