APP创业项目-密码加密

用户名和密码是用户登录系统的身份凭证,用户注册时向服务器提交用户名和密码,服务器写入数据库后,用户登录时提交相同的用户名和密码,如果两者能够跟数据库中的某一条记录匹配,则身份认证通过,建立会话。用户名和密码数据的安全至关重要。本文主要讨论密码的加密问题。

为什么要对密码加密?

首先,将密码明文写入数据库是一件没有道德的事情。很多用户习惯于在各个网络平台使用同一个用户名和密码,如果系统记录了用户的密码明文,那么开发人员就可以直接看到用户的密码,如果用户注册时还留下了邮箱,且用户的邮箱使用了相同的密码,那么开发人员就可以进入用户的邮箱随意浏览了。

其次,一旦网站被攻击,数据库泄露,攻击者将获取到所有用户的密码,这是一件非常可怕的事情,这类事情CSDN博客网站就发生过。

将密码加密后写入数据库,网站开发人员和窃取了数据的黑客都无法知道密码明文,只能依赖密码破解,这一定程度上保障用户的安全。那么,如何加密密码才尽可能安全?下面讨论密码加密相关的几个概念。 继续阅读 [ APP创业项目-密码加密 ]

APP创业项目-PHP框架选择

本文继《APP创业项目-后端语言选择》之后讨论PHP开发框架选择问题。PHP从诞生至今出现了数以百计的大小框架,有人说PHP生来就是反框架的自由语言,框架的使用反而会降低PHP的性能。确实,引入复杂的架构带来了性能的降低,但我认为从团队合作的角度来说,基于统一的框架开发有助于合作与未来扩展。框架的优与劣关系到程序的性能,也关系到开发的效率,性能与开发效率很多时候在项目开发中是一对矛盾体,正如C与JAVA,一个以性能著称、一个以开发效率而流行。在矛盾中寻找平衡从来没有对于错。

PHP的众多框架中,也存在性能与效率的平衡问题,名声在外的Laravel被称为最优雅的框架,Yaf、Phalcon被誉为最快的框架,还有Yii、Codeigniter、Zend Framework等知名框架。并不是说优雅就不快或者快就不优雅,这只是一个相对的评价。那么我们该如何选择框架?

第一、选择的依据是什么?是性能还是效率?

虽然Laravel官网首页大大的字“Love beautiful code? We do too.”表明它对优雅的情怀,这并不影响Phalcon、Yii、Zend Framework的优雅,在开发效率上也并没有比Phalcon有明显地提升,但是不同的框架在性能上的差距还是比较明显的。参见性能比较,该网页从JSON、单查询、多查询等角度进行了框架性能比较,除了PHP原生之外,Phalcon-micro、Yaf、Phalcon都表现出数倍于Laravel的性能。

第二、我们需要框架做到多少,是一个全包保姆型的,还是一个极简爸爸型的?

全包保姆型框架像保姆一样帮你考虑得细致周到,照顾得你基本上不能独立生活。这类框架尽可能考虑到WEB开发的各个方面,框架对开发模式限制较多,开发者最好遵循其限制,较小的项目会显得高效轻松,随着开发的深入,会渐渐在遵循和突破之间进退两难。

极简爸爸型框架像爸爸一样给你提供大方向的导引,小细节充分给你自由。这类框架只实现了框架该实现Route、MVC、Request、Response、AutoLoader,而ORM、Cache、ACL等重要功能都由开发者自由实现。

Phalcon、Laravel在架构上都解耦得很好,他们既可以当做保姆型也可以当做爸爸型。Phalcon同时还提供了Phalcon-micro简化框架以进一步提升性能。

下面简要对Phalcon、Yaf、Laravel分析。 继续阅读 [ APP创业项目-PHP框架选择 ]

APP创业项目-用户身份认证架构

一个互联网项目通常会标配一个用户模块,主要实现用户注册、登录、忘记密码、密码加密、session创建与销毁。随着第三方认证的流行,还需要实现微信、QQ、微博等第三方账号登录及其账号绑定。另外,需要解决APP用户的持久登录问题,多应用服务器身份共享问题,APP内嵌H5应用的身份注入问题等。

首先我们聊以下几个顶层设计的问题。

用户中心是做成一个模块还是一个独立服务?

首先,我们打开百度、淘宝、京东、QQ等互联网产品,你会发现他们都提供了多种多样的独立服务(网站),例如百度有:贴吧、知道、百度云、音乐随心听、糯米团购、外卖等等,京东作为一个主营电商的网站也划分为若干独立的服务:首页www.jd.com、商品列表list.jd.com、商品详情item.jd.com、订单order.jd.com、个人中心home.jd.com等等。每个公司的各种服务都共用同一个身份认证系统:百度登录对话框、淘宝https://login.taobao.com、京东https://passport.jd.com、QQ登录对话框。可见大公司常见的模式是将用户中心做成一个独立服务。

共用一个身份认证服务有什么好处呢?

假如不使用同一个身份认证服务,各自开发各自的身份认证模块,那么各网站服务之间用户无法共通,从一个网站跳到另一个网站需要重新登录,对用户来说很繁琐。

数据共通能够帮助产品团队更好地了解用户,例如用户使用百度搜索“美人鱼”想看下周星驰导演的这部电影的影评,但是除了周星驰导演的《美人鱼》之外,美人鱼还有别的实体,如伊丽莎白·艾伦导演的《美人鱼》,周杰伦的歌《美人鱼》,如果用户多次点击了周星驰的《美人鱼》的相关网页,那用户可能是这部电影的潜在消费者,如果用户随后进入百度的糯米网(包含电影票销售服务),则可以在首页显示《美人鱼》的片花和优惠信息。因此,打通了各服务之间的用户,可以整合各服务的数据去了解用户(即用户画像)。

京东作为一个电商网站,并不像百度,产品那么多样化,为什么也要把首页、商品列表、商品详情、订单等等这些功能模块分到不同的子域名上,由https://passport.jd.com负责认证呢?

一个大型网站项目,通常由很多开发人员分成小组进行开发,各小组既要解耦又要相互合作。解耦的位置可以在模块化代码层面,也可以在网站架构层面。这里将他们称为:代码模块化解耦、多网站架构解耦。

代码模块化解耦要求各小组基于一个基础核心代码,使用同一个语言在同一个框架下各自编写模块,各模块处理好包管理和命名空间,最终合并代码形成一个独立站点。所有代码运行于同一个服务器环境,运维相对简单。但是这部分代码被各个网站平台共用,代码维护将十分困难。

多网站架构解耦要求各小组共用身份认证服务,其他开发细节不再关心,理论上可自由发挥,甚至可以采用不同的语言、框架和服务器,相比代码模块化更加灵活;在服务器负载均衡上也可以更加灵活,可以针对访问频繁的功能部署更多的服务器以提升速度,针对冷门的功能部署较少的服务器以减少开支。

不管是代码模块化解耦还是多网站架构解耦,只要涉及到多应用服务器架构,实现独立的身份认证服务都是一个最佳的选择。

我们知道不同子域名通常意味着不同的网站,不同的网站应该放置到不同的服务器,那么他们之间不可以使用本地文件系统存储session,因为这将导致各网站之间无法共享session。如何解决这个问题呢? 继续阅读 [ APP创业项目-用户身份认证架构 ]

APP创业项目-基于阿里云的服务器架构

阿里云、AWS等各类云计算平台使得互联网创业成本大大降低,不仅仅是服务器硬件成本,更重要的是硬件运维成本。每多购置一台服务器,就多增加一份维护压力,而优秀的服务器运维人员是很难得的,因为这种技术在大学里面没有相关专业,仅凭经验摸索。阿里云不仅仅提供了云服务器硬件资源,更是有一群优秀的运维人员提供技术支持。回想2005年以前的互联网创业,购置服务器、托管服务器、运维服务器,每个服务器都要有一个备份服务器进行容灾,这门槛让很多创业团队难以跨越。如今,我们可以花费很少的成本,拥有一套大互联网公司级别的服务器架构。本文讨论一个APP创业项目如何基于阿里云架构服务器。

一个APP项目可能需要如下服务器:

应用服务器、数据库服务器、文件服务器(CDN加速)、图片处理服务器、LOG服务器、内存服务器、全文检索服务器、负载均衡器、NoSQL服务器(MongoDB)、消息队列服务器等。 继续阅读 [ APP创业项目-基于阿里云的服务器架构 ]

APP创业项目-APP开发技术选型:Hybird还是Native

开发一个APP有很多种可行方案:原生开发(Native)、混合式开发(Hybird)、PhoneGap生成(H5)、React Native、Python+kivy、Lua+Wax等等。本文挑选前三种常见的说说。

原生开发

应用能够发挥最佳性能,是高性能需求的应用的唯一选择,例如游戏开发、复杂应用。iOS用Object-C或Swfit、Android用Java、Win10用.NET,那么我们至少需要三个成熟的程序员。程序员各干各的事情,代码除了思想外都不能共用,相同的业务逻辑需要写三遍。应用发布新版本需要等待三个客户端同时开发测试完成才可。

PhoneGap生成

克服原生开发的平台鸿沟(Gap),几乎不涉及原生代码,使用H5编写应用的所有功能。PhoneGap为H5提供了调用系统的硬件资源的能力,并且提供了打包APP的功能,开发人员无需掌握原生代码。H5部分借助Jquery Mobile、React、Ratchet、Bootstrap、AngularJS等前端框架实现单页应用,APP仅仅是一个筐子,充当着浏览器的作用。一套程序既可以用作APP、也可以用作触屏版网站、还可以嵌入到微信公众平台,真是何乐而不为。但H5的性能和兼容性问题,需要一个出色的前端工程师才能驾驭。单页应用突出的问题在于页面之间的跳转,jQuery Mobile采用Div(Page)的显示与隐藏来模拟页面的跳转,虽然也能模拟转场动画效果、侧滑菜单等一系列类似原生的效果,但是视觉体验明显迟钝。如果界面非常复杂,例如电商网站的商品列表页,需要筛选品牌、类别、价格区间等等,那H5就显得捉襟见肘了。不建议创业产品使用单页应用开发,可以考虑传统网站多页面链接跳转的方式,即使这种方式没有单页应用的界面转换效果,但是更加可用。那界面之间的跳转空白岂不是很难看?这就是混合式的价值了。

混合式开发

采用原生开发与H5相结合,克服H5单页应用的体验限制,减少原生代码量。H5部分无需升级版本可以动态更新。借助Cordova实现H5与原生系统之间的通信。那么混合式怎么解决H5的界面跳转问题呢?混合式即要H5前端程序员,又要iOS、Android和Win10开发人员,并没有减少开发人员的数量,为何不直接原生开发?什么地方用H5,什么地方用原生开发呢? 继续阅读 [ APP创业项目-APP开发技术选型:Hybird还是Native ]

APP创业项目-后端语言选择

对于刚创业的团队,资金和人才配备没有成型的大公司充分,因此在技术选型上须充分思考。本文针对后端语言选择问题作出分析,不会涉及到语言优劣问题,笔者认为语言遵循优胜劣汰规则,能够继续生存下来的语言都是好的语言,只是各自适合解决不同的问题。

APP项目的后端语言通常有:JAVA、PHP、Python、Ruby、.NET、JS等。笔者在项目中只接触过JAVA、PHP、Python和JS,对于Ruby和.NET没有