netty与reactor
转自思否用户@郭艺宾 Reactor模式 Reactor是1995年由道格拉斯提出的一种高性能网络编程模式。由于好多年了,当时的一些概念与现在略有不同,reactor模式在网络编程中是非常重要的,可以说是NIO框架的典型模式,一些经典的框架,比如Mina、Netty、Cindy都是此模式的实现。 我们来看看当年提出的通用模型: 上面的图形中: 1、Handle 可以理解为资源或者文件句柄,放在netty里面就是channel,就是我们实际要处理的东西 2、Event Handler和Concrete Event Handler 就是具体的事件处理器,对应netty中的handler接口和具体的handler 3、Synchronous Event Demultiplexer同步事件多路复用分发器,可以理解为nio中的select 4、Initiation Dispatcher,分发器,可以理解为nio中的循环,也就是netty中的EventLoop,处理各种事件 5、select(handlers)就是真正处理业务的地方 大家注意上面图形中的几个箭头,可以看出各个组件之...
netty组件介绍(2)-channel组件
ChannelHandler组件介绍ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler。Netty提供2个重要的 ChannelHandler 子接口,用来自定义ChannelHandler: ChannelInboundHandler - 处理进站数据和所有状态更改事件(进站指的是读操作等由通道引发的事件) ChannelOutboundHandler - 处理出站数据,允许拦截各种操作(出站指的是写操作等由用户触发的事件,发送到远方服务器的事件) 来看一下ChannelHandler的类层次结构: 上面的类中的Adapter类,提供很多默认操作,比如ChannelHandler中有很多很多方法,我们用户自定义的方法有时候不需要重载全部,只需要重载一两个方法,那么可以使用Adapter类,它里面有很多默认的方法。其它框架中结尾是Adapter的类的作用也大都是如此。所以我们在使用netty的时候,往往很少直接实现ChannelHandler的接口,经常是继承Adapter类。 Cha...
CDN-jsDelivr的使用
什么是cdn 作者:阿里巴巴淘系技术链接:https://www.zhihu.com/question/36514327/answer/1604554133 CDN工作原理内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。 CDN应用广泛,支持多种行业、多种场景内容加速,例如:图片小文件、大文件下载、视音频点播、直播流媒体、全站加速、安全加速。 借用阿里云官网的例子,来简单介绍CDN的工作原理。 假设通过CDN加速的域名为www.a.com,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下: 当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。 LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。 当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。 域名解析请求发送...
关于分布式/集群/微服务的一个理解
关于分布式/集群/微服务的一个理解 分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题 集群:同一个业务部署在多台机器上,提高系统可用性 微服务:一个大服务被拆成多个小服务,提高可拓展性以及可用性 举例 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。 为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。 而微服务则是将厨房这整个部门分成: 一个专门的切菜部, 洗菜部, 备菜部, 炒菜部...,每个部如果忙不过来了,还可以继续横向扩展多个同部门
记一次生产项目的实施部署
记一次生产项目的实施部署<谨供参考> 架构图 0001机器docker安装 更新yumyum update 安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源sudo yum install -y yum-utils yum添加软件源sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo 然后刷新缓存sudo yum makecache fast 然后安装docker-cesudo yum install docker-ce 启动 dockersudo systemctl start docker 验证是否安装成功sudo docker info 开机启动sudo systemctl enable docker docker-compose安装1将docker-compose文件上传到 /usr/local/bin/ 文件夹下,修改此文件的权限,增加可执行:chmod +x ...
本地事务和分布式事务
本地事务本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则: 基本概念事务的概念:事务是逻辑上一组操作,组成这组操作各个逻辑单元,要么一起成功,要么一起失败。 事务的四个特性(ACID): 原子性(atomicity):“原子”的本意是“不可再分”,事务的原子性表现为一个事务中涉及到的多个操作在逻辑上缺一不可。事务的原子性要求事务中的所有操作要么都执行,要么都不执行。 一致性(consistency):“一致”指的是数据的一致,具体是指:所有数据都处于满足业务规则的一致性状态。一致性原则要求:一个事务中不管涉及到多少个操作,都必须保证事务执行之前数据是正确的,事务执行之后数据仍然是正确的。如果一个事务在执行的过程中,其中某一个或某几个操作失败了,则必须将其他所有操作撤销,将数据恢复到事务执行之前的状态,这就是回滚。 隔离性(isolation):在应用程序实际运行过程中,事务往往是并发执行的,所以很有可能有许多事务同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。隔离性原则要求多个事务在并发执行过程中不会互相干扰。 持久性(dura...
Realm: Linux下,流量转发端口转发工具,支持本机BBR
realm地址: https://github.com/zhboner/realm 简介 支持DDNS 只要传入一个域名,那么就能自动后台更新解析。高效,低消耗 依托于Rust语言,Realm保证内存安全。另外,相较于采用Go语言编写的Brook和gost,Realm执行速度更快,资源占用更低,非常适合在低配置的主机上使用。简单 相较于使用iptables动辄几条复杂的命令,Realm仅需一条命令就能启动,保证了部署的方便。UDP + TCP 无需额外的工作,Realm就能同时转发UDP和TCP。 下载,安装 linux环境下载此包, 然后放在**/usr/bin**下, 并赋予可操作权限 使用方式Start from command line arguments:123456# 让 realm 监听本机上的 5000 端口,然后转发流量到 1.1.1.1:443#具体的,启动 realm 需要两个参数:-l 和 -r。#-l 指定监听的本机地址和端口,地址可以省略,但必须指定端口。不指定地址的话会使用默认的 127.0.0.1 地址#-r 指定转发的目的...
hexo基础seo优化
seo搜索引擎优化(Search Engine Optimization),它是一种通过分析搜索引擎的排名规律,了解各种搜索引擎怎样进行搜索,怎样抓取互联网页面,怎样确定特定关键词的搜索结果排名的技术.Google自动收录效果还不错,百度就差得远了 另外GitHub不允许百度的Spider爬取GitHub上的内容,但我仍会把百度相关部分粘贴出来 修改路径结构 permalink: :year:month:day/:title/ 网站收录谷歌 进入谷歌站长(https://search.google.com/search-console),选择第二个带前缀的 然后选择html标签认证, 将内容粘贴到主题可放置head标签的地方,随后,重新部署博客,再点击验证 百度 首先登陆百度搜索平台(https://ziyuan.baidu.com/site/index),点击**新增网站** 输入自己的网站 验证, 我选择的是html标签,然后在主题文件夹下找到放置head标签的地方,将代码粘贴进去, 然后重新提交. 之后在点击完...
定制化Gitbook在线文档服务
定制化gitbook在线文档服务项目介绍 定制化gitbook服务 安装部署教程 Docker 安装docker服务:https://docs.docker.com/install/#supported-platforms 安装docker-compose:https://docs.docker.com/compose/install/ 进入根目录执行 docker-compose up -d 本地试运行 安装 GitBook-cli npm install gitbook-cli -g cmd切到book下,gitbook 初始化 gitbook init注: 超过node10的版本,需替换掉/xxx/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js文件,或注释掉61-63 下载依赖项,执行 gitbook install 注: 4,5可选一个执行 服务形式启动,默认端口4000:执行gitbook serve 构建成静态文件:执行gitbook ...
利用github的actions实现blog的cicd
参考: https://zellwk.com/blog/github-actions-deploy/ 首先博客如果使用hexo搭建, 且借助hexo-deployer-git依赖进行远程上传的话, 则需要将repo设置为ssh方式, https方式是不支持的, 如下 12345deploy: type: git # Windows: https://github.com/wang-xiaowu/wang-xiaowu.github.io.git repo: git@github.com:wang-xiaowu/wang-xiaowu.github.io.git branch: master 当前样例为, 一个blog_source库(未公开)存储未编译md文档, 走cicd流程之后, 将编译好的资源利用hexo d的方式部署到另一个一个github源仓库(开源库) 首先配置ssh/private key1ssh-keygen -t rsa -b 4096 -C "943915349@qq.com" -f key 邮箱修改为本人邮箱 复...
