AllinGo 发布的文章

创建centos镜像,后端开发测试环境容器化,解决多个项目并行开发时资源不足,并且各容器间资源隔离,使用时即时申请、开发完即时释放,提高机器资源利用率。

1、查看镜像

docker images

2、启动容器

docker run -itd -p 8081:8290 --name test registry.xxx.com/centos6u3:1.1 /bin/bash
// 启动参数
// -p 8081:8290 host-container端口映射
// -d 以守护进程方式运行
// -t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开
// --name 设置container容器名

3、登录容器

docker attach c0b204c34730
// c0b204c34730为docker ps容器id

注意:退出容器需要ctrl+p、ctrl+q(容器仍在后台run),不能使用exit或者ctrl+c,这样会stop容器。

4、停止/销毁容器

// stop
docker stop c0b204c34730
// delete
docker rm c0b204c34730

5、文件拷贝
容器启动时通过-v将host目录挂载到容器/mnt,例如:

docker run -itd -v /home/work:/mnt registry.xxx.com/centos6u3:1.1 /bin/bash

6、保存修改

docker commit -m "update" c0b204c34730 registry.xxx.com/centos6u3:1.2
docker push registry.xxx.com/centos6u3:1.2

使用Nginx的反向代理可实现服务端负载均衡SLB(Server Load Balancing),本文介绍几种常用的Nginx软负载方法。

1、负载均衡

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

SLB的定义引用自伯乐在线一篇文章:http://blog.jobbole.com/97957/,废话不多说,下面几节介绍Nginx实现软负载方法。

2、默认轮询
Nginx配置文件http作用域定义upstream:

upstream test{
    server 10.69.12.10:8010;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010;
}

server作用域Location:

Location /{
    proxy_pass http://test;
    ...
}

- 阅读剩余部分 -

前段时间经常使用的一款APP无秘下架了,伤感(。_。) ,于是想开发一款类似的APP。自己对后端还算熟悉,但是没有客户端的实际开发经验。开发语言Java & OC(Swift)也不熟悉,于是这时我有两个选择,学习Andorid还是iOS,正好身边有iOS开发大牛,另外苹果推行的Swift语言语法不像OC那么别扭(Swift语法特别像Golang,好感+1),加上平时使用的iOS应用体验比Android要好不少,于是选择了学习使用Swift语言开发iOS应用,这里记录初学者使用Swift开发iOS应用的体验。

一、开发工具
毋庸置疑,选择苹果官方的Xcode8,尽量选择最新版本,苹果每次升级iOS的时候都会升级Xode,避免最新版本iOS没法调试,所以最好安装最新版本Xcode。市场上虽然有AppCode、Qt第三方IDE可以开发iOS应用,毕竟不是官方开发的,新人避免入坑,所以使用Xcode。

二、创建工程
选择iOS,Single View App,语言选择Swift,ProductName填写App名字(后面可以更改),一路Next创建工程。

三、目录结构
我认为学习一门新的开发框架,首先需要整体了解工程结构、每个目录文件的存放的什么,这样有利于进一步深入学习。以创建工程名为LoveFinder为例,有如下文件夹:

  • LoveFinder:项目代码,AppDelegate.swift为工程生命周期文件、ViewController.swift文件为UI中View关联的Controller、Main.storyboard为APP 主界面UI文件(可以实现控件的拖拽、可包含多个View)、LunchScreen.storyboard为APP启动UI文件、Info.plist为APP配置信息,比如productName,还可以加入自己的dict,比如Http API接口配置等
  • LoveFinderTests:单侧
  • LoveFinderUITests:UI单测,Tests暂时不需要太多了解
  • Products:APP产出信息

最重要的是LoveFinder源代码目录,搞清里面文件功能关系就ok了。

- 阅读剩余部分 -

关注携程技术沙龙已经很长时间了,之前不少讲座针对机器学习的,不是特别理解。本期的互联网基础架构是我很感兴趣的topic,四个专题讲座收获颇多,有携程统一配置管理平台Apollo,去哪儿Qtrace全链路监控组件,新美大DBA的数据库分级分库分表介绍,唯品会的消息网关实践,距离上次活动已经两周了,今天抽时间整理下:-)

事实是携程官方整理的更好,真的是干货,在此贴下链接:

1. Qunar全链路跟踪及Debug
https://mp.weixin.qq.com/s/atger7wX2nmc2hVGMiDzSw

2、高吞吐消息网关的探索与思考
https://mp.weixin.qq.com/s/EIa4a3VPX9Onj1bt24hWjA

3、携程开源配置中心Apollo的设计与实现
https://mp.weixin.qq.com/s/HUmH_5n98CeV43Yfz51iHg

Python中的字符串编码是一个很让初学者费解头疼的问题,特别是遇到中文时相关处理经常抛出Exception。字符串到底以什么编码在Python内部进行处理,Python2.x中文编码如何安全的转换,Python 2.x与Python 3.x在编码方面的区别?本文接下来会一一进行讲解。

logo-python.png

1、字符串在Python内部的编码
在Python内部字符串都是以unicode编码进行处理,即源码文件中的字符串首先都会被decode成unicode编码的字符串,之后Python内部再进行处理,用代码显示表示如下:

unicode_str = input_str.decode('utf8')

以上是将uft8编码的字符串input_str转换为unicode,decode成功的前提是你得知道input_str的原始编码,比如这里是utf8,否则会抛出UnicodeDecodeError的异常。

2、Python源码字符串的编码
Python 2.x的默认编码格式是ascii,字符串在转换前均会decode成unicode。初学Python大家可能会编写如下的代码:

#!/usr/bin/python
s = '你好'
print s

会出现下面的异常:

SyntaxError: Non-ASCII character '\xe4'

这个是因为错误的将utf8编码的中文当成ascii解码。解决方法也很常规:在Python源码文件中声明编码格式,最常见的声明方式如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

- 阅读剩余部分 -