Lin Blog

林柏格


  • 首页

  • 关于

  • 标签

  • 分类

  • 搜索

用Docker实现MySQL ProxySQL读写分离

发表于 2017-10-10 | 更新于 2019-09-30 | 分类于 实践

ProxySQL是一个高性能的MySQL中间件,能够代理数百台MySQL服务器,支持数十万的并发连接。ProxySQL代理MySQL并提供读写分离,查询重写和数据分片等功能。
这篇文章主要介绍用Docker Compose编排用ProxySQL实现MySQL集群上读写分离的实践过程。
Docker Compose编排中使用了一个现有镜像,就是breeze2/proxysql。
本次实践源码上传在GitHub的breeze2/mysql-proxy-docker。

阅读全文 »

OAuth2.0的授权模式和应用

发表于 2017-10-06 | 更新于 2019-09-30 | 分类于 知道

OAuth(开放授权)是一个标准协议,为用户资源的鉴权问题提供了一个安全、开放而又简易的解决方案。OAuth 2.0定义了四种鉴权模式:

  • 授权码准许(Authorization Code Grant)
  • 隐式准许(Implicit Grant)
  • 客户端准许(Client Credentials Grant)
  • 密码准许(Resource Owner Password Credentials Grant)

这里只介绍这四种鉴权模式,即获取有效令牌(Token)的四种过程,关于OAuth 2.0的其他更多内容建议阅读《理解OAuth 2.0》及 The OAuth 2.0 Authorization Framework。

阅读全文 »

单点登录的实现

发表于 2017-10-03 | 更新于 2019-09-30 | 分类于 实践

单点登录(Single Sign-On),是指一次登录,多站复用登录态。这里主要讲解一下基于共享session实现的单点登录。

对于大多数B/S结构(浏览器/服务器结构)的Web网站,用户登录态都是存储在session中的,而sessionID(session的唯一识别号)记录在前端的cookie中,只要同步各个网站的sessionID,各个网站便能共享同一个session,进而共用用户的登录态。需要共享session的情况主要有三种:

  1. 同域名下不同路径;
  2. 同父域名下不同子域名;
  3. 不同域名;

下面会根据这三种情况,借用Laravel和JQuery代码,逐一实现单点登录(共享session)。

阅读全文 »

Swoole连接池在Laravel中的使用

发表于 2017-09-20 | 更新于 2019-09-30 | 分类于 实践

Swoole php-cp

php-cp是Swoole组织开发的一个PHP扩展,可以本地代理MySQL、Redis连接,提供连接池,读写分离,负载均衡,慢查询日志,大数据块日志等功能。相比原生PHP的数据库连接,php-cp连接池可以缓存连接,免去一些重复新建、回收数据库连接带来的时间消耗和IO消耗;并且php-cp连接定时ping数据库,使得连接不会太久没活动而被回收;在连接数超过限额时,php-cp提供了排队机制,而不是直接拒绝,所以php-cp是值得高并发的PHP项目引入使用的。
php-cp提供了代替PDO的类:pdoProxy,所以在主流PHP框架中引入php-cp是十分简便的。在php-cp的README中,提供了Yii、CI和ThinkPHP等框架的集成样例,但是少了Laravel,所以这里介绍一下在Laravel项目中怎样集成php-cp。

阅读全文 »

自动化工具Nightmare的一次实践

发表于 2017-09-16 | 更新于 2019-09-30 | 分类于 实践

事情是这样的,一个线上的参赛活动网站要收集参赛选手提交的微云分享链接,但是普通微云账号的分享链接只有7天期效。那该怎么办呢?只好把所有选手的微云分享链接转存到一个高级微云账号上,再由高级微云账号分享出来,以此增长分享时间。如果靠人工操作,那工作量太大,也难免会出错,所以写了一个自动化脚本来执行这个工作。(后来微云取消了分享期效限制,这个脚本没有正式用上😊)

阅读全文 »

关于LNMP的优化

发表于 2017-09-10 | 更新于 2019-09-30 | 分类于 求索

线上有一个用LNMP构架的网站,有一天看到它出现了“502 Bad Gateway”错误,于是就开始思考优化问题了。
首先,明确一下HTTP各个状态码的含义:

  1. 1XX 临时消息
  2. 2XX 返回成功
  3. 3XX 重新定向
  4. 4XX 客户端错误
  5. 5XX 服务端错误

基于LNMP的网站上,当HTTP请求返回的状态码是5XX的时候,说明是服务端出了问题;但问题不一定是出在NginX,因为NginX本身十分轻量,不做太多的复杂逻辑处理,所以很少会出错;除了静态资源的请求,其他大部分请求NginX都会转给PHP-FPM来处理,所以一般问题是更多地出在PHP。比如,开篇说那个网站出现的502错误,查看NginX日志发现大量的connect() to unix:/PATH/TO/PHP-FPM-SOCK failed (11: Resource temporarily unavailable),其实原因是系统最大连接数过小。

阅读全文 »

腾讯云COS的一次实践

发表于 2017-08-16 | 更新于 2019-09-30 | 分类于 实践

很多网站都会需要文件上传、下载的功能,但是服务器本身配置(如容量、带宽等等)可能扛不住大量的上传、下载,这时候,利用一些现成的云存储服务来分担一下服务器的压力。这里主要介绍一下腾讯云COS的使用,大概的功能流程是:

  1. 前端(JS)实现文件上传功能;
  2. 后端(PHP)给前端发放签名,使前端可以直接访问COS;
  3. 根据COS生成的文件链接访问文件。
阅读全文 »

HTTP文件上传的一个后端完善方案(NginX)

发表于 2017-08-12 | 更新于 2019-09-30 | 分类于 方案

很多网站都会有上传文件的功能,比如上传用户头像,上传个人简历等等,除非是网盘类的网站,一般上传文件不会作为网站的主要功能;而且,如今大众的网速已经是足够的快,上传几百KB的文件,几乎可以秒内完成。所以,大多数网站,对于上传文件的处理,都是简单的前端POST上传,后端验证存放然后返回访问地址。毕竟,文件小,网速快,一瞬间的事情谁会多在意呢?

存在问题

假设我们有一个网站,基于NginX+PHP+JS构架,网站允许用户上传一些小视频、音乐或者PPT等文件在线上展示,单个文件大小限制不超过30MB,那么我们要怎样实现这个上传功能呢?

阅读全文 »

怎样算出Pi(π)

发表于 2017-03-14 | 更新于 2019-09-30 | 分类于 求索

圆周率日(Pi Day,又译π节)是一年一度的庆祝数学常数π的节日,特地写一篇与π相关的文章。

一道题目

最近碰到一道数学编程题目,就是利用以下公式求出π的(近似)值:
$$ x - \frac{x^3} {3!} + \frac{x^5} {5!} - \frac{x^7} {7!} + \ldots = \sum_{n=0}^{+\infty} \frac{(-1)^n x^{2n+1}} {(2n+1)!} $$

网上搜了一下,原来这是正弦函数的泰勒级数展开式(高等数学早忘光了)。

阅读全文 »

关于用户多标签的更新

发表于 2017-01-22 | 更新于 2019-09-30 | 分类于 求索

在项目开发中,经常要现实这样的一个功能——关系表更新。比如,一个用户可以设置多个标签,而一个标签下又可以有多个用户,两者是多对多的关系,用一张关系表记录用户的标签数据,那么,当更新用户标签的时候,怎样安排执行流程,才是最优的呢?

数据关系

假设数据库中有三张表,user,tag,user_tag:

假设数据库中有三张表,

user:

id name
1 user1
2 user2
3 user3
… …

tag:

id title
1 tag1
2 tag2
3 tag3
… …

user_tag:

| id | user_id | tag_id | deleted_at|
| — | — | — | — | — |
| 1 | 1 | 1 | null |
| 2 | 2 | 1 | null |
| 3 | 3 | 1 | null |
| … | … | … | null |

user_tag表记录了user表和tag表之间的关系,并且user_tag表内使用软删除。

阅读全文 »
12345
林毅锋

林毅锋

阿牛不说话
45 日志
8 分类
36 标签
RSS
GitHub E-Mail
友情链接
  • 赖同学
© 2015 – 2019 林毅锋
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Muse v7.1.2