0%

创建分卷压缩文件

1
zip -s 100m -r file.zip foo/
  • -s: 创建分卷的大小
  • -r: 循环压缩文件夹下面的内容

切分已有的文件:

1
zip existing.zip --out new.zip -s 50m

执行完之后会创建下面一系列文件:

1
2
3
4
5
new.zip
new.z01
new.z02
new.z03
...

解压分卷文件

1
2
3
4
# 将分卷文件合并成一个单独的文件
zip -s 0 split.zip --out single.zip
# 解压文件
unzip single.zip

四个维度

  • 性能可扩展:性能无法完全实现线性扩展,但要尽量使用具有并发性和异步性的组件。 具备完成通知功能的工作队列要优于同步连接到数据库。

  • 可用性可扩展:CAP理论表明,分布式系统无法同时提供一致性、可用性和分区容错性保证。 许多大规模Web应用程序都为了可用性和分区容错性而牺牲了强一致性,而后者则有赖于最终一致性来保证。

  • 维护可扩展:软件和服务器都需要维护。在使用平台&工具监控和更新应用程序时,要尽可能地自动化。

  • 成本可扩展:总拥有成本包括开发、维护和运营支出。在设计一个系统时,要在重用现有组件和完全新开发组件之间进行权衡。 现有组件很少能完全满足需求,但修改现有组件的成本还是可能低于开发一个完全不同的方案。 另外,使用符合行业标准的技术使组织更容易聘到专家,而发布独有的开源方案则可能帮助组织从社区中挖掘人才。

Read more »

我们为了保证系统的高可用性,如果按着每天访问的峰值作为标准来设计系统, 绝大数情况下访问量较低时,无论是硬件资源还是网络带宽等资源都会造成巨大的浪费。 那么如何从技术上解决这个问题呢?答案是大规模弹性架构设计。

大规模弹性架构的主要设计目标是系统的高可用性和高扩展性:根据系统的实际需要,系统自动弹性分配资源。 在需求量大,比如峰值的时候,系统自动调配足够的资源;在访问量小,系统自动释放出部分的资源,从而实现资源的按需分配。

那么大规模弹性架构的基本工作原理是什么?其主要是利用高性能虚拟化技术,实现了计算、存储和网络资源的统一调度和弹性分配。

  1. 实现动态部署。为了应对突发峰值访问量或者可能的网络攻击,需要在应用服务器内部部署一些监控程序, 由主控程序判断当前整个集群的负载情况,自动增加或者减少服务节点,并且自动部署应用程序,从而从容应对突增的业务流量。

  2. 实现故障自动恢复。当一台物理机损坏时,系统需要自动监测到硬件故障,并且在第一时间内, 把云服务器迁移到新的宿主机上,同时硬盘数据需要保持最后一刻的状态。数据安全是第一位, 因为数据始终面临误删文件、病毒破坏、程序写错、硬件损坏等种种可能的风险。在弹性计算平台上, 需要利用快照功能自动完成数据的备份。

Read more »

Basic认证是HTTP中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。

当一个客户端向一个需要认证的HTTP服务器进行数据请求时, 如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码。 用户输入用户名和密码后,用户名和密码会经过BASE64加密附加到请求信息中再次请求HTTP服务器, HTTP服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。

Basic认证要求在请求时在请求头中添加Authorization: Basic Base64编码串Base64编码串生成规则是user:password做Base64编码。

curl使用-u, --user <user:password>设置Basic认证。

详见:HTTP Authentication: Basic and Digest Access Authentication

curl命令是一个利用URL规则在命令行下工作的文件传输工具。 它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。 作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、 cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。 做网页处理流程和数据检索自动化,curl可以祝一臂之力。

常用选项

options description
-d/–data <data> 传送数据
-H/–header <line> 自定义头信息传递给服务器
-i/–include 输出时包括protocol头信息
-I/–head 只显示请求头信息
-o/–output 把输出写到该文件中
-O/–remote-name 把输出写到该文件中,保留远程文件的文件名
–progress 显示进度条
-s/–silent 静默模式,不输出任何东西
-w/–write-out [format] 什么输出完成后
-X/–request <command> 指定什么命令
Read more »

SQLite简介

SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。SQLite是在世界上最广泛部署的SQL数据库引擎。

SQLite优点:

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  • SQLite不需要配置,这意味着不需要安装或管理。
  • 一个完整的SQLite数据库是存储在一个单一的跨平台的磁盘文件。
  • SQLite是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  • SQLite是自给自足的,这意味着不需要任何外部的依赖。
  • SQLite事务是完全兼容ACID的,允许从多个进程或线程安全访问。
  • SQLite支持SQL92(SQL2)标准的大多数查询语言的功能。
  • SQLite使用ANSI-C编写的,并提供了简单和易于使用的 API。
  • SQLite可在UNIX(Linux, Mac OS-X, Android, iOS)和Windows(Win32, WinCE, WinRT)中运行。
Read more »

使用Docker部署thinkphp,需要注意几件事:

  1. thinkphp的入口文件在public目录下,所以需要将VirtualHostDocumentRoot指向public目录;
  2. thinkphp需要设置伪静态,Apache需要加载mod_rewrite.so模块;
  3. 下载相应版本的thinkphp放到项目根目录下。
1
2
3
4
5
6
7
8
9
10
11
FROM php:5.6-apache

ENV THINKPHP_VERSION=5.0.21

RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load \
&& sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf \
&& sed -i 's/\/var\/www\/html/\/var\/www\/html\/public/g' /etc/apache2/sites-enabled/000-default.conf
RUN curl -OL https://github.com/top-think/framework/archive/v$THINKPHP_VERSION.tar.gz \
&& tar xvf v$THINKPHP_VERSION.tar.gz && mv framework-$THINKPHP_VERSION thinkphp

ADD . /var/www/html/

如果在项目中用到了扩展,使用docker-php-ext-install命令安装相应的扩展:

1
2
3
4
5
6
7
# 安装postgresql扩展
RUN apt-get update && apt-get install -y libpq-dev \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo pdo_pgsql

# 安装mysql扩展
RUN docker-php-ext-install pdo pdo_mysql

Git常用命令

git help

Git帮助命令,用来查看Git帮助,直接使用git help可以查看git所有相关的子命令, 使用git help <subcommand>可以查看对应子命令的详细内容。

1
2
3
git help        # 查看git帮助
git help init # 查看git初始化命令帮助
git help commit # 查看git代码提交帮助

git init

Git初始化命令,直接在一个空目录下执行命令git init即可, 当然,也可以在一个不是git项目的目录下执行。

git config

Git配置命令,用来配置一些git常用的配置参数,例如用户名等。

git配置一般分为两种,一种是当前项目的配置,一种是全局的配置。 如果两个位置都有同一个配置,当前项目的配置覆盖全局的配置。

1
2
3
4
5
git config user.name                # 查看用户名设置
git config user.name <your_name> # 设置用户名
git config --global core.editor vim # 全局设置git命令编辑器为vim
git config credential.helper cache # 将账号密码缓存15分钟
git config credential.helper store # 将账号密码永久缓存

git add

将待提交的文件缓存到暂存区。

1
2
3
git add <filename>  # 将文件filename提交到暂存区
git add <folder> # 将目录folder下的改动过的文件都提交到暂存区
git add . # 将项目所有改动的文件提交到暂存区

git commit

将暂存区中的文件提交。

1
git commit -m '<reason>'    # 提交,并解释提交的理由
Read more »

brew安装完软件之后:

  • 配置文件位置在/usr/local/etc目录下
  • 安装文件在/usr/local/Cellar目录下
  • 可执行二进制文件在/usr/local/bin目录下

GIFT格式是一种编写可导入试题的格式,它可用来编写选择题、判断题、简答题、填空题以及数字题。 GIFT格式可是题库可导出格式的一种。这种格式是Moodle社区内开发的,其他软件或多或少支持它。

格式符号

符号 说明
// text Comment until end of line (optional)
::title:: Question title (optional)
text Question text (becomes title if no title specified)
[...format...] The format of the following bit of text. Options are [html], [moodle], [plain] and [markdown]. The default is [moodle] for the question text, other parts of the question default to the format used for the question text.
{ Start answer(s) – without any answers, text is a description of following questions
{T} or {F} True or False answer; also {TRUE} and {FALSE}
{ ... =right ... } Correct answer for multiple choice, (multiple answer? – see page comments) or fill-in-the-blank
{ ... ~wrong ... } Incorrect answer for multiple choice or multiple answer
{ ... =item -> match ... } Answer for matching questions
#feedback text Answer feedback for preceding multiple, fill-in-the-blank, or numeric answers
####general feedback General feedback
{# Start numeric answer(s)
answer:tolerance Numeric answer accepted within ± tolerance range
low..high Lower and upper range values of accepted numeric answer
=%n%answer:tolerance n percent credit for one of multiple numeric ranges within tolerance from answer
} End answer(s)
\character Backslash escapes the special meaning of ~, =, #, {, }, and :
\n Places a newline in question text – blank lines delimit questions
Read more »