DaLei@home:~$

  • AWS S3临时上传和下载权限的获取

    背景 S3用于文件存储,类似于阿里云的OSS,使用的这类云存储面临一个问题是用户权限的问题,如普通用户没用上传的权限,不能上传自身相关的文件,或者对于一个隐私文件,用户想访问怎么办。 AWS可以通过Lambda可以比较精细控制S3访问权限,但是在这不作讨论 我们讨论的是通过自己的服务器控制S3访问权限,对于私有文件的访问或者需要获取上传的权限,比较简单的方式是直接把Key下发给客户端,客户端通过Key去访问或上传,但是面临一个问题就是安全性,如果Key泄露,则会导致信息的问题。 因此必须有一种获取临时的上传或者获取的权限的接口,AWS SDK提供这种方式。下面我们以Python为基础说明相关问题 获取临时的上传权限 AWS提供python boto3包作为官方的SDK,通过generate_presigned_post函数提供临时的上传权限。 import boto3 client = boto3.client( 's3', aws_access_key_id='Test_key_id', aws_secret_access_key='Test_key' ) # 设置访问权限 fields = {"acl": "public-read"} # 设置访问权限和文件大小 1K- 500K conditions = [ {"acl": "public-read"}, ["content-length-range", 1024, 500 * 1024] ] file_name = "test_image_file.jpg" # 300秒内有效 post = client.generate_presigned_post( Bucket='jibon', Key=file_name, Fields=fields,...

  • MySQL事务等级相关实验

    查看事务等级 查看全局事务等级和当前会话等级 SELECT @@global.tx_isolation,@@tx_isolation; REPEATABLE-READ REPEATABLE-READ #MySQL 默认事务等级是这两种 修改全局事务等级和当前会话等级 # 全局 set global transaction isolation level serializable; # 会话 set session transaction isolation level serializable; 基于RR事务等级的实验 初始化工作-创建表 create table test_wl (id int PRIMARY KEY AUTO_INCREMENT, name varchar(20), num int); 一般的更新操作,按照给定的编号执行 # session1: 会话一 1. start transaction; 4. update test_wl set...

  • Django使用mysql的并发性问题的讨论

    MySQl的事务等级 LEVEL DIRTY NOT REPEATABLE READ PHANTOM READ read_uncommittd Y Y Y read_committd N Y Y repeatable-read N N Y serializable N N N Django对于MySQL事务等级的选择 如果项目并发量不高,可以选择使用serializable,只要使用事务就不会有任何问题,django代码也不用考虑锁的问题,有助于提升开发效率。 使用serializable的问题是效率的问题,在并发量比较高的时候不建议使用此级别 当并发较高时候repeatable-read是一个很好的选择 使用repeatable-read时,需要对需要更改的数据库选项加锁,增加代码的复杂度 Django加锁的方式 How to Manage Concurrency in Django Models 上述文章讲述如何在django中加锁,通过两种方式,乐观锁和悲观锁 悲观锁是基于select_for_update 进行的 乐观锁是基于给数据加一个版本字段,通过在代码中操作进行的,详细信息可以参考上述链接 Django一些其他注意事项 低于serializable事务等级的代码一定需要加锁,否则会出现一些奇怪的问题,手动测试复现不了,只有通过压力测试Locust一类的工具才会复现 get_or_create 函数不不要用于事务等级RR,具体原因参考官方解释 Django lazy loading相关会缓存数据库变量的值,可以值会和数据库中的值不一致 其他持续更新中

  • 使用locust进行性能测试

    Locust是一款开源的负载测试工具,它使用python语言实现,支持单机测试和分布式部署联合测试。 使用python编写相关的测试脚本,简单易用功能强大。 为什么使用负载测试工具呢? 对于测试人员,手动测试只能测试功能相关的问题,对于性能手动测试无能为力 对于开发人员,可以指导程序优化,提高程序运行效率。 对于程序而言,可以检验程序在高并发的稳定性,和数据库关键数据的ACID特性 Locust有什么优点? 安装,部署,使用简单,开包即用 脚本编写简单,套用模板,请求函数和python requests库的使用完全一致。 支持本地单机运行和主从结构多机运行,能够完成日常使用 Locust一个简单脚本和运行 import random from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): def on_start(self): self.login() def on_stop(self): self.logout() def login(self): pass def logout(self): pass #定义任务,可以定义多个任务,参数1表示执行的比例 @task(1) def set_user_info(self): headers = {} data = { "schools": "BUPT", "user_birthday": "2000-01-01" } x...

  • 搭建基于Http点播的nginx服务器

    * 安装环境:CentOS 6.10 安装依赖库 yum install automake autoconf make gcc gcc-c++ yum install pcre pcre-devel yum install zlib zlib-devel yum install openssl openssl-devel 获取nginx源码并编译 wget http://nginx.org/download/nginx-1.14.2.tar.gz tar xvf nginx-1.14.2.tar.gz # 主要是with-http_mp4_module模块用于支持http的mp4视频直播 # with-http_auth_request_module 这个模块用于授权,从远程连接获取授权信息做访问控制 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-http_auth_request_module make make install 安装可执行文件到系统 # 删除原nginx, 创建软连接 cd...