由Windows开发平台向Linux平台转移的一些想法
从毕业到现在已经快20年了,一直在从事Windows平台上的开发工作。刚毕业那会大约是97,98年左右,工作的平台除了Windows平台还有Dos平台,因为在学校学习时,也是从Dos开始的。因此对于从事Dos平台上的DBase程序开发也不需要适应期,后来转向到Foxpro语言。使用Foxpro语言做了差不多2年的数据库开发及维护工作。在这期间Windows95系统在国内越来越主流,因此也开始学习Windows平台上的一些开发工具,最开始时还是从Foxpro的升级版本Visual Foxpro开始的。Foxpro作为一种解释型语言,在Windows平台上没什么优势。相对于BASIC的升级版本Visual Basic来说无论是性能还是UI体验差太多,也因此很快就由Visual Foxpro转向的Visual Basic语言。同时也开始了对Win32API的学习,在学习的过程中对于Windwos系统及Visual Basic都是更加深刻与清晰的认识,对于Visual Basic对 Windows系统严重依赖和Active DLL的工作模式实在是让人恼火。也曾经一度转到Delphi语言进行开发工作,但后来还是因为工作需要的原因又转回到Visual Basic语言。再后来随着.Net的出现,转向了C#。在数据库方面也是算是由Dos平台的Dbase,Foxpro,Access,SQL Server一路走来。因为工作一直围绕着Windows平台上的MIS相关开发工作,所以对于从2000年左右已经开始的Web开发并没有太多实际的接触,当时也只是对于HTML,Javascript,CGI等技术做过一些粗浅的学习,因为当时工作中没有与Web相关的内容,因此就没有继续深入的进行学习。
时间一晃到了2008年,公司的产品方向也开始向Web方向转移,由于公司一直走的是微软系的技术路线。因此选择ASP.Net进行Web产品开发也就变成了理所当然,公司第一款Web产品是一个在线支付平台。由于公司里的人员对于Web开发都不熟悉,当时这个项目还进行了外包,也正是因为公司的人员对于Web开发不熟悉,所以对于产品的一些功能需求定义及功能实现都提出来太具体的内容,也造成了外包公司开发的产品最终并不算成功。也是从那时起公司决心产品还得由自己人来做,但自己做的前是需要现在人员要首先转技术路线,从以往的WinForm程序开发转向Web开发,最开始只指定了2,3个人进行预研,当时的选项有Asp.net、Java及Saleforce。还有当时在国内并不知名的Pythan。最好发现像我们公司这种小公司,还是ASP.net最适合。
一晃10年过去了,我们的产品已经基本全部都转到了Web平台。但最近3,4年云服务的一军突起及移动设备应用的兴起,又让我们公司再一次站到了选择的十字路口。不可否认的国内近10年的发展可以用一日千里来形容,整个中国就是在不停的加速中发展着。我们公司的老板一直在美国,最近一次出差去美国与老板沟通。他也不得不承认,现在在互联网应用这方面,中国比美国走得还要快。在移动支付这方面优势就更加明显,我们在2年前就已经为公司的在线支付平台开发了二维码相关功能,但是由于二维码在国外使用的较少,所以一直没有得到太好的推广,直到Apple的IOS11开始支持QR码并提供扫描功能后,这项功能才开始向客户进行有效的推广。其实没有应用场景也难怪客户无法理解功能。这也从侧面的反应了在金融支付这块已经走的非常前面了。由于公司的产品大部分集中在Web端,公司的人员结构也与10年前有着很大的不同。以前的团队主要是由开发人员与测试人员组成,现在的团队的人员结构则是由开发人员+测试人员+运维人员+技术支持+美工组成。谈到运维,就得谈谈数据中心及服务器,目前我们的服务器主要都托管在美国的数据中心,但运维还是由我们负责,无论硬件还是软件都是由我们进行管理。这对运维人员的要求就比较全面,要对网络协议、服务器硬件、操作系统、数据库系统、工具软件都很熟悉,才能较好的完成相应的运维工作。最近两年比较火的全栈工程,我想是与这方面的需求有关。出于现实的情况是我们是一家规模比较小的公司,我们利润支撑不起太多的人员。同时我们也想把我们的精力集中到我们产品业务功能的改进上,因此我们希望将我们的产品迁移到云上,这样我们就可以不用担心网络维护与硬件维护等相关的工作。所有的起因都是因为要面对现实。在考察了一年的时间后,我们发现现有的云端服务商提供的产品价格还是比较高的,无论的Azure,AWS,Google,阿里,腾讯。这些服务商中性能稍微高一些的虚拟机,每月的使用费都要在¥1000以上。像我们原来基本Windows平台开发的ASP.Net应用,对于性能要求都太高了,同时微软系产品的另一个硬伤(产品许可价格)就更加突显了。这样性价比,对于我们争取客户来说毫无优势。我们在调查过程中发现,Linux平台对于硬件需求都是较低的,而且Linux平台的产品很多都是开源及免费的。性能与安全性并不输微软系产品。因此我们决定将我们的产品再一次的做转型,这一次将全部转向Linux平台。
平台选定后,就是决心了。我初始的想法还是先小范围的测试,搭建一个用于测试的平台,Linux系统的分支很多(FreeBSD , OpenBSD, PCBSD , Mac OS,CentOS, Scientific Linux, Red Hat,Debian, arch linux, Gentoo, Slackware,OpenSuSe, Fedora, Ubuntu)最终选择了CentOS,主要是考虑其是基于RedHat,稳定性高。同时部署Nginx+PostgreSQL服务,并开发一款小型应用,用于测试平台的可行性及性能。因为以前对于Linux平台上的技术真的不太熟悉,所希望借着这次转型好好的学习一下Linux平台下的相并技术。万事开头难,准备选从安装配置CentOS开始。下一篇就讲讲我在安装CentOS过程中遇到的问题及解决方法。
由Windows开发平台向Linux平台转移的一些想法的更多相关文章
- 在windows系统下打包linux平台运行的go程序
在windows系统下打包linux平台运行的go程序 1.先在main.go下打包成.exe可执行程序测试代码是否正确 //cd到main.go目录 go build //打包命令 如果打包成功则表 ...
- 【转】Redis安装整理(window平台和Linux平台)
原文连接:http://zheng12tian.iteye.com/blog/1471726 原文作者:zheng12tian 转载注明以上信息! window平台Redis安装 redis wind ...
- 12.QT4.7.4-解决WIN平台和Linux平台中文乱码,QLineEdit右击菜单中文显示
1.解决Win平台中文显示 1.1首先解决win平台上中文显示乱码问题 1)首先查看qt creator的编码格式 通过->编辑->选择编码 查看. 2)如果qt creator的编码格式 ...
- Linux中使用Vim快速更换文档中Windows换行符为Linux平台
一.简述 平时我们把Windows编写好的sh文件放在linux上跑时,经常出现换行符的问题.快速切换的解决方法如下: 二.解决 vim test.sh :set ff? 如果出现fileforma= ...
- 静态库和动态库的区别和win平台和linux平台代码实现
静态库和动态库的区别 什么是库 库是写好的,现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说,库是一种可 ...
- 采用Sambaserver由win平台,linux平台上传文件
1.构造yum [root@db /]# cd /etc/yum.repos.d/ [root@db yum.repos.d]# vi yum.repo --改动光盘挂载位置,enabled设置为启动 ...
- .NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像R ...
- Linux平台开发指南
声明:以下内容摘自http://www.me115.com/post/25.html 以下技术和工具是Linux平台下工作的基础,熟练掌握: C++ 工作语言,重要性不言而喻: 入门: <C++ ...
- Thrift在Windows及Linux平台下的安装和使用示例
本文章也同时发表在个人博客Thrift在Windows及Linux平台下的安装和使用示例上. thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的R ...
随机推荐
- SendMessage,BroadcastMessage
三者比较 用于向某个GameObject发送一条信息,让它完成特定功能.其实本质是调用绑定GameObject里面的Script里面的函数,可以跨语言的,例如Javascript可以调用C#的函数,我 ...
- C++设计模式 ==> 装饰(者)模式
简介 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.装饰模式使用对象嵌套的思想,实现对一个对象动态地进行选择性的属 ...
- 用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)-陈远波
一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...
- JAVA随机数之多种方法从给定范围内随机N个不重复数
一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j ...
- How to display values with in piechart using Jfreechart(values in sector )
I am using Jfreechart to create pie charts. Values are displayed outside pie chart as labels. I want ...
- RMAN 备份数据库到DISK后进行数据恢复
RMAN 备份数据库到DISK,然后进行数据恢复 一.rman备份 1. 全备脚本 vi bakup_level0.sql connect target / run { allocate channe ...
- mpvue使用vant Weapp运行npm run build命令打包后失效
最近在使用mpvue开发微信小程序,在开发过程中使用有赞的小程序ui框架—— vant Weapp ,至于如何使用在我个人博客中有一篇关于如何使用vant Weapp ,需要的同学请点进这里自行查看. ...
- __init__函数
初始化函数,类似于c++的构造函数 在创建一个对象时默认被调用,不需要手动调用.self后面接的形参,在类实例化的时候必须传递,__init__函数里的参数都属于成员变量
- JDK1.8源码分析之HashMap
一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...
- Python2.7-pprint
pprint 模块,提供了对数据的漂亮输出(pretty-print),它会尽量保持对象转变成字符串后只有一行,如果超过了指定的长度则会分成多行,目的就在于便于阅读和美观 模块的类: pprint.P ...