解决LVS上行丢包的过程和收获
记技术经理的一天
8点,起床,打开 APP,恩,一切正常,放心。。。
9点,出门了,看看头条,有篇Web缓存架构的文章不错,看完后顿感,等咱们有钱了,一定要买台 F5 玩玩硬LB,不然真是人生遗憾。
9点30,上老板直播间溜达溜达,顶顶人气。。。
10点,公司例会。
10点20,然后过了一下日活计划表
10点30,跟 HR 确认了一下 Android 新兄弟的 Offer 情况。筛选了一下 Android 简历
10点40,跟前端确认了一下录屏视频在 mate8 那儿自动给横屏了的问题。。。
10点50,日常看一下 ganglia,有一台client 挂了,上去重启下
11点,iOS 例会,一问新功能“动态贴纸”测的怎么样,负责的QA和开发都说没问题,我一听,心里就凉了半截儿。。。
11点15,小ma 那儿工作太多啦,效率低得都被童鞋吐槽了,赶紧沟通解决下。。。
11点30,跟一下 iOS 审核情况,看看马甲包的状态
12点,跟 Flash/H5 游戏外包的吃个饭,深感创业的孩儿真苦。。。
13点,眯一会儿
14点,APP 游戏房间开会,性能、安全、防刷 都揪心呀。。。
15点,还是 DAU 的事儿,找量真烦心呀。。。
15点20,筛选了一下数据挖掘简历
15点30,发个邮件看看金山那边有啥新东西同步下。。。
16点,提醒大家赶紧申请笔记本支架。。。
16点15,今天奶茶半价,太饿顺便吃个 tea,可惜今天没太阳,揪心。。。
16点30,面试一个数据挖掘,是个妹纸,有点儿胖,能力针一般,性价比太低,算了不推了。。。
17点,复试一个 Android 的同学,相当积极的小伙子,说“假如咱们这儿给机会,那明天的新东家我就不进了!”。。。HR 请病假了,揪心,这段时间也是辛苦她。。。
17点15,网宿的 Https 推拉流还没测试好,哎哟都1个月了,揪心。。。
17点30,老板说他的大APP竟然因为 scheme 暴露,被人占用了,结果就是自己的H5,拉起了别人的APP。这就很尴尬了。。。结果一想,原来咱们也是这么干,我去,赶紧准备改吧。。。
18点,连麦会议,当期的架构也是揪心,还是得把连麦服务器跟CDN搭在一起才行,推流也最好是私有 UDP。。。
19点,下班回家。看看头条,刷刷微信,唉~ 咱们产品竟然成了 3.15 联合报道者,赶紧share一下。。。
20点,晚饭慢慢吃。。。
21点,补个今天的面试评测表,整理下笔记,整理下标签
22点,学习下 Android,今年一定要把唯一一个缺憾补上。。。
23点,看一下 Hadoop 权威指南,今天同学发了一篇《从零开始安装Hadoop 2.7.4》,恩。。。
1点,洗洗睡,睡之前再上去秋一眼,恩,美女越来越多了,真好。。。
(九)iOS 开发真机运行与调试
作者:kim
时间:Apr 29, 2015
版权:非商用,自由转载,请保留原文地址。
1. 经过了前面这么多的铺垫,终于到了鸡冻人心的时刻,我们要创建一个项目,并且运行到真实设备上面去!
2. 打开 Xcode -> File -> New -> Project 创建一个新项目。
3. 下面项目配置中的 Bundle Identifier(Product Name + Organization Identifier)理论上最好是跟我们在创建 App ID 的时候保持一致!
Bundle ID 是可以在 Xcode -> Targets -> Info -> Bundle Identifier 里面修改的,所以我们现在可以故意随便起名!
4. 项目建好大概是这个样子。
5. 连接好设备,假如 Xcode 这时识别不了设备,则要检查 Targets -> General -> Deployment Target 是否跟设备的一致!
6. 当设备正常被识别后,这时我们先尝试耍下流氓,在 Toolbar 选择好设备,直接运行(command + R)程序开始 Building !
7. 显然,苹果是不会给你耍流氓的机会!刚开始 Build,就提示没有找到相应的 Provisioning Profiles ,故不能把程序安装到设备上!
8. 点击 Fix Issue ,会提示我们赶紧去买个 Program 的提示,或者把已经加入了 Program 的账号添加到 Xcode !
9. 我们在很久之前就已经加入了 Program 了(心疼的花了$99),点击 Add 添加账号吧!
10. 当然,我们也可以通过 Xcode -> Preferences -> Accounts 进入账号管理界面,点击左下角的 “+” 添加账号!
11. 选中账号,点击右下的 View Details ,可以查看账号的证书和配置文件信息!
12. 在里面我们可以看到我们的 Provisioning Profile !点击 Done 并关掉 Accounts 设置。看到刚才的提示,这时已经变成自动选中我们的账号了!
13. 点击 Choose 之后,项目就会继续 Build !当 Building 进行到 Signing product 对代码进行签名的时候,就会提示使用你的私钥对代码进行签名,这里我们点击“始终允许”!
14. 然后打开你的设备,应该就能看到 App 的运行了,当然目前还是一个空白的界面,因为里面还什么都没有!
15. 如果遇到一些不知名的错误,比如 Provisioning Profile 文件损坏,或者无法下载更新账号上面的配置文件,我们也可以手动添加!
选择 Window -> Decives ,或者 shift + command + 2 ,打开设备管理界面
16. 打开设备的 Show Provisioning Profiles 界面
17. 点击 “+”,把我们之前在下载的 Provisioning Profile 手动添加到 Xcode 里面!
18. 开始我们的真机调试之旅吧!
(八)代码签名 CodeSigning 的原理与过程
作者:kim
时间:Apr 29, 2015
版权:非商用,自由转载,请保留原文地址。
在介绍真机运行调试之前,我们先介绍代码签名的概念。代码签名是 App 之所以能够在真机上运行的基础!每个 iOS 开发者都必须跨过的坑!
1. 代码签名 Code Signing 也叫 App 签名,它是依靠 iOS 证书来进行的,它保证了 App 的合法性、完整性、真实性以及一致性(未被修改)。
2. 代码签名的核心是:证书、公钥、私钥。依赖于 X.509标准 与 公开密钥加密。
3. 在 Xcode 中设置代码签名非常简单,只需要设置 Targets -> Build Settings -> Code Signing Identity 设置好签名信息。
假如是正式发布的话,推荐手动设置签名证书!
4. 签名过程,在底层是由命令行工具 codesign 来完成的!当 Xcode 编译一个应用程序,在这个应用构建完成后就会自动调用 codesign 命令来进行签名!
5. 为了试验签名,我们先制作一个假的应用文件 apptest.app 做测试用。
6. 公钥和私钥都完整可用的证书,才可以用来对代码进行签名,使用 security 命令,可以查看系统中的这类证书。这里需要记下 identity 的全称供后续使用。
$ security find-identity -v -p codesigning
7. 通过 codesign 命令使用上面的 identity ,对文件进行签名,期间需要授权允许使用用户本地的私钥。
8. 查看下已被签名的应用的信息。
注意,假如是一个正常的程序包,那么 Format 那里应该显示类似 “bundle with Mach-O thin (arm64)” 的信息。
9. 检查一下当前的签名是否完美,即未被破坏。no news is good news!
$ codesign —verify apptest.app
10. 尝试破坏一下签名,再验证,果然发现问题了!
11. 在实际对 App Bundle 的打包中,签名过程会在程序包中新建一个 _CodeSignature/CodeResources 的 plist 格式的文件,这个文件存储了被签名的程序包中所有资源文件的签名!
——————————————————————————–
12. 代码签名的验证主要是通过配置文件 Provisioning Profile(PP文件)与个人私钥 Private Key 共同完成。
(实际上,这个验证是通过 PP 文件里面的证书中的个人公钥 Public Key ,以及个人私钥 Private Key 共同完成的。)
13. 还记得我们在请求 Certificate 的时候,生成的 CSR 文件吗?这实际上是一个公钥/私钥对。私钥用于对代码进行签名,公钥用于验证。
我们可以在 Keychain 看到证书的公钥信息,以及与之配对的个人私钥(专用密钥)。
14. 假如上面的私钥被删除,或者没了,那么就不能对代码进行签名,也就无法使用这个证书了。假如私钥被别人获取了,别人更可以“代替”你来发布 App 了!因此一定要保存好自己的私钥,最好是导出来保存在安全地方!
15. 选择 ”个人信息交换(.p12)” 文件格式,导出 .p12 文件!
由于 p12 文件包含个人信息,所以必须要密码。
16. 如果选择 “证书(.cer)” 文件格式,则导出证书文件本身!(也可以从 Apple Developer Member Center 下载)
17. 这样,如果想和别人或者其它设备共享证书时,只要把 p12 文件传给他,然后他就可以使用证书里面的私钥对代码进行签名了。
18. 代码签名:对指定信息使用哈希 Hash 算法,得到固定长度的信息摘要 Signature,然后再使用私钥 Private Key 对摘要进行加密,就得到了数字签名。
19. 代码签名的验证过程分两步:
第一步,验证证书本身的可信性与完整性:
1)在 iOS 系统以及其它 Mac 设备内部,都拥有苹果的根证书 AppleWWDRCA.cer,里面包含了 Apple 的公钥。
2)用 Apple 的公钥对证书(.cer)中包含的数字签名进行解密,如果成功得到(经过 Apple 使用私钥加密过的)信息摘要 Signature1,则说明了证书的可信性。
3)然后对证书内容使用证书声明的哈希算法,计算出一个信息摘要 Signature2。
4)如果 Signature1 == Signature2,则说了明证书的完整性。
第二步,验证代码的可信性与完整性:
1)在证书可信的前提下,成功提取出用户的真实公钥 Public Key。这个公钥就可以用于检验代码签名,或者用于加密通信。
2)用真实的用户公钥对 CodeSignature 里面所有代码/资源签名进行解密,得到一系列信息摘要 Signature-a1、Signature-b1、Signature-c1 etc.
3)假如所有信息摘要都正确被机密出来,则表明代码、资源文件是可信的,是完整的,能够合法地在该设备上运行。
(七)创建配置文件 Provisioning Profile
作者:kim
时间:Apr 27, 2015
版权:非商用,自由转载,请保留原文地址。
1. Provisioning Profile 是苹果独有的,安装在设备上的配置文件,后缀名是 .mobileprovision ,通常简称 PP 文件。
简单地说,PP 文件就是把 Certificates 个人证书、App ID(或者其它各种服务种类的 ID)、Device ID,三者捆绑起来。
Provisioning Profile = Signing Certificate + App(Service) ID + Device ID
2. 简单地说,Provisioning Profile 用来描述哪些人开发的哪些 App(或者服务)能够在哪些 Device 上面运行的文件。
1)Provisioning Profile 决定 Xcode 用哪个证书(包含用户的公钥)/私钥组合(Key Pair / Signing Identity)来签署应用程序(Signing Product)。
2)在应用程序打包时,Provisioning Profile 被嵌入到 .ipa 包里。
3)安装应用程序时,Provisioning Profile 文件被拷贝到 iOS 设备中,运行该 iOS App 的设备也通过它来认证安装的程序。
3. 在网站上访问 “Certificates, Identifiers & Profiles” -> Provisioning Profiles ,进入 iOS Provisioning Profiles 配置文件创建界面。
4. 点击 “manually generate profiles” 或者右上角的 “+” 号,挑选配置文件的类型。这里我们需要的是 Development 开发型配置文件。
5. 点击 Continue,选择要包含的 App ID 。
6. 点击 Continue,选择要包含的证书 Certificate(可多选)。注意,被签名加密的 App 的相应的那个证书必须被添加进去!
7. 点击 Continue,选择设备 Devices(可多选)。
8. 继续点 Continue,给 Provisioning Profile 配置文件起名。
9. 点击 Generate,生成配置文件。
10. 点击 Download 下载 .mobileprovision 文件,这就是生成好的配置文件。不下载其实也是可以的,因为 Xcode 会帮你管理它。
11. 在网站的配置文件列表能看到,新的配置文件已经处于 Active 激活状态。
12. 另一方面,Xcode 将全部配置文件,包括用户手动下载安装的,和 Xcode 自动创建的 iOS Team Provisioning Profile,都放在目录 ~/Library/MobileDevice/“Provisioning Profiles”/ 下。
13. 可以用 security 命令查看一下配置文件的内容,我们可以看到 PP 文件实际上是一个 XML 格式的 plist 文件。
$ security cms -D -i nameofppfile.mobileprovision
14. 注意到其中的 UUID 信息,就是每个 PP 文件的唯一标识,通常作为文件名前缀。
15. 注意到 DeveloperCertificates 信息,这是一个数组,包含了所有的证书信息,证书(即data)都是基于 Base64 编码的,符合 PEM(Privacy Enhanced Mail, RFC 1848) 格式。
16. 因为一个证书可以存在于多个不同的配置文件之中,所以在实际开发中,如果用 Xcode 自己选择配置文件的话,可能存在不确定性。幸好,Xcode6 开始提供了选择配置文件的功能,让用户自己为项目选择合适的 Provisioning Profile!
17. iOS 设备和 Mac 系统都使用 Provisioning Profile 中的开发/发布证书来判断 App 的合法性与完整性!
1)可信性:使用苹果根证书 AppleWWDRCA.cer 能正确地从证书中解密出 App(Executable Code)的内容摘要(Signature),则证明此 App 确实是经过苹果签发的,即确实是认证开发者发布的!
2)完整性:对 App(Executable Code)本身使用 PP 文件记录的哈希算法,计算出内容摘要(Signature),若与第一步得到的一致,则证明此 App 确实未被篡改过!