Continue...

OAuth2

今天是清明假期最后一天,跟以往一样下起了细雨。天气越舒适,人的思绪就好像会越乱。年轻人和长辈的想法总会有出入,早上家人提出的话题被我草草结束。虽表面上结束了这个话题,但其实关于这个话题的联想一直脑海萦绕。还是写一篇技术博文冷静一下吧,生活上事情不提太多,毕竟这里是技术频道。 😀

Continue reading...

网站应用架构的演进

随着互联网的发展,网站应用的规模不断扩大,网站的应用架构已经从最初的“单体应用架构”演进到现在的“微服务架构”。听说阿里在成立时,网站用的也是“单体应用架构”。BTW:我的毕业设计用的也是“单一应用架构” 😀 单体应用架构 垂直应用架构 SOA(Service-Oriented Architecture)应用架构 微服务应用架构 现在还是有相当一部分系统用的是“单体应用架构”,我觉得是取决于用户的体量。简单、少人用的系统就无谓浪费太多资源去使用一个复杂的架构,毕竟越简单越少BUG。 毕业至今,自己曾经参与开发过的系统也仅有“单体应用架构”和“单体应用架构拓展版”。后面三种应用架构仅停留在自己搭建玩玩,真正上过生产的系统还没有。好奇心太强,始终还是想亲身经历挑战。

Continue reading...

Nginx做正向代理

近日,朋友在公司摸鱼时发现笔记本在使用公司的WI-FI后无法进入B站。于是乎在群里“拍了拍”我。本着科技服务生活的精神,我欣然地接受了这个请求 😀

Continue reading...

有感:代码审查

Hi, 好久没见,你还有在为一个月前时定下的目标在奋斗吗?笔者仍在朝目标前进噢。 距离一篇博文的发布已经过去一个月,在这段时间没更新博客的原因除了陪伴家人,还有还有因为项目投产接二连三地出现了问题,复盘后发现根本原因是团队沟通不足以及项目版本控制混乱。于是花了些时间和精力组织同事们将投产流程和版本控制梳理了一遍,整理出一些文档以供日后参考。 我现在多了一项工作——代码审查,其实刚开始会有抵触情绪,因为我觉得每个人应该对自己的代码负责。可是,作为团队的“小组长”有必要对项目负责,对客户负责。简单的功能测试可能会忽略掉一些BUG,例如流未关闭,这是需要压力测试才能反应出问题。按照公司现有流程,未必每一次上班都会做压力测试,所以现情况代码审查也是多了一重保障吧。当然,每个公司/组织的项目情况都不一样,还是需要视情况而定吧。 代码审查这项工作,让我觉得自己的责任又重了些,管理者的这个身份标识又更“锃亮”了。会有感慨:这就是程序员成长的必经之路吗?我现在所经历的事,似乎跟以往看过的一些《写在入职*周年》、《***的必经之路》所写的内容相差无几。不由感慨,原来自己的工作早就被预言过了 😀 最近朋友圈的封面换成了硅谷,先用做“望梅止渴”吧,希望有朝一日能去看看,即便是旅游。 感谢看完文章的你,如果你也在坚持一些事,也想跟别人诉说,欢迎在下方留言。成长路上很开心有你共行,谢谢,共勉。

Continue reading...

与FISCO BCOS同成长

Hi,各位读者,最近过的怎么样?在今天,我们一起告别了“难忘”的2020,迎来了崭新的2021,希望大家在新的一年能实现自己的愿望。还有,新年快乐!值此辞旧迎新之际,我想以此文记录我第一个接触的开源社区,以及和他的“故事”。 第一次接触FISCO BCOS社区的小伙伴是2018年在HK的CityU科技展上,我还很清楚地记得这两位小伙伴是David和Henry。和两位小伙伴在参展去交流了一些社区、行业发展的情况,互换了联系方式后,我便去会议室等待他们进一步的分享,当时FISCO BCOS的版本还是1.0x。道别后,可能大家都没想到三年后的今天,我们的交流会是如此频繁且密切。

Continue reading...

Nginx

本文主要介绍以下几点,关于Nginx的部署,读者可自行参考其他资料。 Nginx核心配置文件解读 Nginx应用场景之反向代理 Nginx应用场景之负载均衡 Nginx应用场景之动静分离 Nginx底层进程机制解剖 1. Nginx核心配置文件解读 Nginx的核心配置文件conf/nginx.conf包含三个部分内容:全局部分、events部分、http部分。 1.1. 全局部分 从配置文件开始到events块之间的内容,此处的配置影响nginx服务器整体的运行,比如worker进程的数量、错误日志的位置等。 1.2. events部分 events块主要影响Nginx服务器与用户的网络连接,比如worker_connections 1024,标识每个worker进程支持的最大链接数为1024。 1.3. http部分 http部分是配置最频繁的部分,虚拟主机的配置,监听端口的配置,请求转发、反向代理、负载均衡等。 2. Nginx应用场景之反向代理 2.1. 场景1 需求: 浏览器请求Nginx服务器,Nginx将请求转发给一个目标服务器,用户看到的是目标服务器的相应页面。整个过程中目标服务器对客户端不可见,服务端向外暴露的是Nginx的地址。 实现: 部署Tomcat,保持默认监听8080端口; 修改Nginx配置,并重新加载; 修改Nginx配置,如图5 重新加载Nginx配置(./nginx...

Continue reading...

Apache Tomcat Web Application Server

此文介绍Tomcat相关原理及配置,文章并非一次将所有关于Tomcat(基于8.5.50)的知识点全罗列出来,因此文章可能会不定期更新。若有更新会及时更新以下的目录: Tomcat系统架构与原理剖析 Tomcat服务器核心配置 Tomcat类加载机制剖析 Tomcat对HTTPS的支持及Tomcat性能优化策略 1. Tomcat系统架构与原理剖析 1.1. 浏览器访问服务器的流程 HTTP请求只是定义数据的组织格式(通信格式),是应用层协议。数据传输依靠的是TCP/IP协议; Tomcat使用socket实现了浏览器与服务器的通信; 1.2. Tomcat系统总体架构 1.2.1. Tomcat请求处理大致过程 Tomcat是HTTP服务器,Tomcat接收到浏览器发送的HTTP请求后,会调用相应的业务类。如图3: 如图3,若HTTP服务器(Tomcat)直接调用业务类完成业务处理,那么会存在耦合性大的问题。所以实际上Tomcat的结构如图4: HTTP服务器接收请求后分配给Servlet容器处理,Servlet容器通过Servlet接口调用业务类。Servlet接口和Servlet容器这一整套内容叫作Servlet规范。* Tomcat既按照Servlet规范的要求实现了Servlet容器, 同时也具有HTTP服务器的功能。因此Tomcat的两个重要部分:1)HTTP服务器;2)Servlet容器 1.2.2. Tomcat Servlet容器处理流程 HTTP服务器将请求信息使用ServletRequest对象封装起来; Servlet容器拿到请求后,根据URL和Servlet的映射关系,找到相应的Servlet; 如果Servlet还没被加载,就用反射机制创建这个Servlet,并调用Servlet的init方法完成初始化; 调用此Servlet的service方法来处理请求,处理结果使用ServletResponse对象封装; 将ServletResponse对象返回给HTTP服务器,HTTP服务器会将响应发送给客户端。...

Continue reading...

SpringMVC主要流程与九大组件

(1)DispatcherServlet为SpringMVC中最核心的类,整个过程始于客户端发出一个HTTP请求,Web应用服务器接收到这个请求,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),则 Web 容器将该请求转交给 DispatcherServlet 处理。 (2)DispatcherServlet 接收到这个请求后, 将根据请求的信息(包括 URL、 HTTP方法、 请求报文头、 请求参数、 Cookie 等)及 HandlerMapping的配置找到处理请求的处理器 (Handler)。可将 HandlerMapping看作路由控制器, 将 Handler 看作目标主机。值得注意的是,在 SpringMVC中并没有定义一个 Handler 接口,实际上,任何一个 Object都可以成为请求处理器。 (3)当 DispatcherServlet...

Continue reading...

Spring IoC基础与源码剖析

Bean的概念在Spring框架出现之前就已经被提出了,笔者通过此篇文章剖析了Spring Bean在Spring IoC(控制反转)中「如何被生成」以及「如何被管理」。 注意:在本文中,bean和beanFactory开头大小写遵照Java语法中类与对象的定义。 从上图中可以看出bean可以通过三种方式定义,无论是由XML文件还是注解定义,作用都是「定义需要实例化的类」和「描述类之间的依赖」。 beanFactory通过反射技术来实例化对象并维护对象之间的关系,BeanFactory在Spring框架中是顶层接口(会在后面源码分析的部分介绍),实际上bean是被其子接口ApplicationContext的实现类来管理,实现类均表示在上图中。 PS:源码剖析部分在今后将会补充至本文下方。

Continue reading...