技术栈的选择

好的技术栈的扩展要快于需要进行的维护。

最初选择的技术并不是关键,最初决定在最后看来一定是错的,唯一的问题是它会错多久。关键在于,他要在遇到拐点时有壮士断腕的勇气,而不是为了存活而一层一层地给他贴上创可贴。

遵循这样的准则及其重要。从目标来看,这比紧跟潮流,为了做出出事的最佳技术决定而进行无穷无尽的设计分析要更为重要。我们应该做的是,确保把自己和环境锻造成能够适应各种变化,能够知道什么时候是重建的合适时机。

google就是一个很明显的“非自主发明不可”的栈,他所有的一切都是内部编写出来的。在google的时候,我想可能除了gcc之外,我没用过任何一种开源工具或库。部分原因是google领先行业内其他所有公司5年或5年以上。google所做的东西,就像MapReduce(使用无数低成本的商业硬件去运行分布式系统)这样的产品,他们基本上都是在发明和普及很多这样的产品。这些产品在现在全都成了行业标准,但是大部分在Goolge之前并不存在。google就是应为比其他公司超前了许多,所以不得不去实现,这样的境况也许有成了一种自我增强,因为我们已经形成也适应了非自主发明不可的文化。

编程范式:
1、面向对象编程
2、函数式编程
3、静态类型
4、自动内存管理

当你选择一门语言时,面对的不仅仅是技术上的权衡取舍,而是一个社区。就像选择一间酒吧是为了品尝美酒,但那还不是最重要的----酒吧更是人们休闲和聊天的地方。这和选择计算机语言的道理是一样的,一门语言随着时间的推移会建立社区,不仅仅是人,还包括软件方面的产物:工具,库等。这就是为什么有些语言理论上要比其他语言出色,实际上却不如其他语言的原因之一------它们还没有建立健全的社区。

安全
身份认证:
存储密码的第一条规则就是:不要用纯文本存储密码。
存储密码的第二条规则就是:不要用纯文本存储密码。
安全存储密码至少要做到:
1、在客户端界面使用适当的密码框
2、只通过SSL连接连接发送密码
3、为每个密码创建长的、唯一的、随机的盐(salt)
4、将密码和盐结合起来,使用密码安全散列函数(比如bcrypt)将他们散列化
5、保存盐和散列,将原始密码丢弃

CSRF攻击(跨站点请求伪造)

代码注入攻击

安全公告

选择数据库

一个分布式数据库不可能同时满足一下三点:
1、一致性(所有节点能够同时访问同一份数据)
2、可用性(保证每一个请求都会接收到成功或失败的响应)
3、分区容忍性(系统一部分出现任意信息丢失或故障时,系统仍能够继续工作)

数据库常见选择:
1、对数据存储格式和现有数据库的查询进行优化
2、在数据库之前设置缓存(例如内存缓存)
3、建立主-从复制
4、对无关联的表进行垂直分区
5、对单张表进行水平分区
6、建立多主复制

你可能感兴趣的:(技术栈的选择)