飞污熊博客

静下心来做一件事

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一, 它通常是指,通过设计减少系统不能提供服务的时间。

单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。 高可用保证的原则是”集群化”,或者叫”冗余”:只有一个单点,挂了服务会受影响。 如果有冗余备份,挂了还有其他backup能够顶上。

有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。 所以,又往往是通过”自动故障转移”来实现系统的高可用。

接下来我们看下典型互联网架构中,如何通过”冗余+自动故障转移”来保证系统的高可用特性。

阅读全文 »

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的, 特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息, 以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

JWT官网:https://jwt.io/

阅读全文 »

Web刚刚兴起的时候,服务器只提供一些简单的HTML页面和链接,用户打开网址去浏览。 并不需要记住每次请求是谁发送来的,每次请求对服务器来讲都是全新的。 既然是浏览,作为一个服务器,为什么要记住谁在一段时间里都浏览了什么文档呢?

但是好日子没持续多久,很快大家就不满足于静态的HTML文档了,交互式的Web应用开始兴起,尤其是论坛,在线购物等网站。 必须管理会话,必须记住哪些人登录系统,哪些人往自己的购物车中放了商品,也就是说我必须把每个人区分开。

由于HTTP协议的无状态特性,必须加点小手段,才能完成会话管理。

本文总结了3种常见的实现web应用会话管理的方式:

  1. 基于server端session的管理方式
  2. 基于cookie的管理方式
  3. 基于token的管理方式

目的是加深对web中用户登录机制的理解,对实际项目开发也有参考价值。

阅读全文 »

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息, 是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

  1. 建立在 TCP 协议之上,服务器端的实现比较容易。
  2. 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  3. 数据格式比较轻量,性能开销小,通信高效。
  4. 可以发送文本,也可以发送二进制数据。
  5. 没有同源限制,客户端可以与任意服务器通信。
  6. 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

协议标识符是ws(如果加密,则为wss),服务器网址就是 URL

1
ws://xncoding.com:80/some/path

另外客户端不只是浏览器,只要实现了ws或者wss协议的客户端socket都可以和服务器进行通信。

阅读全文 »

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), 而无需将用户名和密码提供给第三方应用。

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。 每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。 这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。

目前最新版本是OAuth 2.0,这里我通过用户使用 github 登录在我的博客网站上留言为例,简述 OAuth 2.0 的运作流程。

阅读全文 »

最近在做ceph的日志盘分区时候遇到一些问题记录下来。比较古老的分区工具是使用fdisk,后来因为磁盘越来越大, 而fdisk遇到分区容量超过2TB时无能为力,并且分区还要限制最多4个主分区。越来越不适用现代磁盘, 后来有了parted工具专门用来对大磁盘分区的。

硬盘分区最常见的类型为msdosgpt,前者表示MBR分区,而后者表示GPT分区。

传统的BIOS只支持MBR分区硬盘启动,一个硬盘只能分成四个分区,并且单个分区最大不超过2TB。 EFI支持GPT分区启动的,GPT分区没有分区数目的限制并且单个分区可以超过2TB。

阅读全文 »

首先通过PyQt5来创建一个GUI程序,比如我写的一个简单的计算器程序目录如下: img.png

运行效果如下: img.png

需要将这个GUI打包成windows上面的exe文件。发现了2个都能对python项目打包的工具:pyintaller和nuitka。

这2个工具同时都能满足项目的需要,两者都具备的优点:

  1. 隐藏源码。这里的pyinstaller是通过设置key来对源码进行加密的; 而nuitka则是将python源码转成C++(这里得到的是二进制的pyd文件,防止了反编译),然后再编译成可执行文件。
  2. 方便移植。用户使用方便,不用再安装什么python啊,第三方包之类的。
阅读全文 »

PyQt5工具可以快速实现简单的界面开发,包括界面设计、布局管理以及业务逻辑实现(信号与槽)。 简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。

阅读全文 »