TypeScript和Istio,是2018年非常热门的两个技术。
但是,它们属于完全不同的领域。TypeScript,是JavaScript的超集,由微软开发,属于前端开发领域,主要用于大型Web应用的开发。Istio,是由Google、IBM、Lyft联合开发的服务网格,属于后端微服务领域,主要用于微服务的连接、管理和安全。
这两个技术,虽然领域不同,但是都很热门,都代表了各自领域的发展方向。很多开发者,在技术选型或者学习路线规划时,会纠结:到底该学TypeScript,还是学Istio?前端和后端,到底该往哪个方向发展?
今天,我想从技术特点、适用场景、学习曲线、就业前景等方面,详细对比这两个技术,帮你做出适合自己的选择。当然,这两个技术不是非此即彼的,如果你有精力,都学当然更好。但是,对于大多数人来说,时间和精力有限,需要有一个优先级。希望这篇文章,能帮你理清思路。
一、TypeScript是什么
在对比之前,先简单介绍一下这两个技术。
TypeScript,是JavaScript的超集。
TypeScript,由微软开发,2012年正式发布,作者是C#语言的首席架构师安德斯·海尔斯伯格。TypeScript,在JavaScript的基础上,添加了可选的静态类型、类、接口、泛型、枚举等特性,让JavaScript可以像Java、C#一样,进行面向对象的开发,并且有编译时的类型检查。
TypeScript的代码,不能直接在浏览器中运行,需要先编译成JavaScript,然后才能在浏览器或者Node.js中运行。TypeScript的编译,是一个类型检查的过程,如果代码中有类型错误,编译就会失败,提示错误信息。这样,可以在开发阶段,就发现很多潜在的bug,提高代码的质量和可维护性。
TypeScript,最大的优势,是类型系统。对于大型项目,代码量大,协作人员多,类型系统可以大大提高代码的可维护性,减少bug,提高开发效率。而且,TypeScript有很好的IDE支持,Visual Studio Code、WebStorm等IDE,都对TypeScript有很好的支持,智能提示、自动补全、重构等功能,都非常强大。
2018年,TypeScript已经发布到2.x版本,越来越成熟,也越来越流行。Google的Angular框架,从Angular 2开始,就全面采用TypeScript开发;React、Vue等框架,也都支持TypeScript;很多大型公司,比如微软、Google、阿里、腾讯等,都在使用TypeScript开发大型项目。TypeScript,已经成为前端开发的标配之一。
二、Istio是什么
Istio,是一个开源的服务网格。
服务网格(Service Mesh),是微服务架构中,一个新的基础设施层。它的作用,是在微服务之间,处理服务间的通信,包括服务发现、负载均衡、熔断、限流、重试、链路追踪、安全认证、流量管理等。
在传统的微服务架构中,这些功能,通常是在应用代码中实现的,比如用Spring Cloud、Dubbo等框架,在代码中集成服务发现、负载均衡、熔断等功能。这样做的问题是,这些非业务功能的代码,和业务代码耦合在一起,增加了业务代码的复杂度,而且不同的语言、不同的框架,实现方式不一样,很难统一管理。
服务网格,把这些非业务功能,从应用代码中抽离出来,放到一个独立的代理(Sidecar)中。每个微服务,都有一个自己的代理,微服务之间的通信,都通过代理来进行。代理,负责处理服务发现、负载均衡、熔断、限流、重试、链路追踪、安全认证等非业务功能。这样,业务代码,只需要关注业务逻辑,不需要关心这些非业务功能,大大简化了业务代码的复杂度。而且,所有的微服务,都通过统一的代理来通信,管理和监控也更加方便。
Istio,就是这样一个服务网格。它由Google、IBM、Lyft联合开发,2017年5月发布0.1版本,2018年还在快速迭代中,预计2018年7月发布1.0版本。Istio,基于Envoy代理(Lyft开源的高性能代理),提供了流量管理、安全、可观测性三大核心功能。
Istio,最大的优势,是语言无关、框架无关。不管你的微服务是用什么语言写的(Java、Go、Python、Node.js等),不管你用什么框架,都可以接入Istio,享受服务网格带来的好处。而且,Istio和Kubernetes深度集成,在Kubernetes上部署和使用,非常方便。
2018年,Istio虽然还没有发布1.0版本,但是已经非常热门,被认为是微服务的未来方向。很多公司,都在关注和尝试Istio,希望通过服务网格,简化微服务的管理,提高微服务的可观测性和安全性。
三、技术特点对比
介绍完两个技术,我们来详细对比一下。
1. 领域不同
TypeScript,属于前端开发领域,是一种编程语言,主要用于Web前端开发,也可以用于Node.js后端开发。
Istio,属于后端微服务领域,是一种基础设施,主要用于微服务的连接、管理和安全。
这两个技术,领域完全不同,一个是前端,一个是后端。所以,选择哪个,首先要看你想往哪个方向发展。如果你想做前端开发,那TypeScript是必学的;如果你想做后端微服务开发,那Istio是值得学习的。
2. 成熟度不同
TypeScript,2012年发布,到2018年已经6年了,发布到2.x版本,非常成熟,稳定可靠。已经被很多大型公司,用于生产环境的大型项目,经过了充分的验证。
Istio,2017年5月才发布0.1版本,到2018年才1年多,还没有发布1.0版本,还在快速迭代中,API和功能,还在不断变化。虽然已经有一些公司,在生产环境中尝试使用Istio,但是总体来说,还不够成熟,生产环境使用,还有一定的风险。
成熟度,是一个很重要的考虑因素。如果你是在生产环境中使用,TypeScript更稳定,更可靠;Istio还在快速发展中,可能会有一些坑,需要有一定的踩坑能力。
3. 学习曲线不同
TypeScript的学习曲线,相对平缓。如果你已经会JavaScript,那么学习TypeScript,主要就是学习类型系统、类、接口、泛型、枚举等新增的特性,这些概念,和Java、C#等面向对象语言类似,如果你有面向对象语言的基础,学起来会很快。即使没有,TypeScript的语法,也比较直观,容易理解。
Istio的学习曲线,相对陡峭。要学习Istio,首先需要有微服务和Kubernetes的基础,理解微服务架构、容器、Kubernetes等概念。然后,需要理解服务网格的概念,理解Sidecar代理、流量管理、安全、可观测性等功能。Istio的配置,比较复杂,有很多概念(VirtualService、DestinationRule、Gateway、ServiceEntry等),需要花时间去理解和实践。
所以,从学习曲线来看,TypeScript更容易上手,Istio需要更多的基础知识和实践经验。
4. 适用场景不同
TypeScript,适用于中大型Web应用的开发。如果你的项目,代码量大,协作人员多,需要长期维护,那么TypeScript的类型系统,可以大大提高代码的可维护性,减少bug,提高开发效率。如果是小型项目,或者个人项目,JavaScript可能更灵活,更方便。
Istio,适用于微服务架构,特别是微服务数量多,语言多样,需要统一管理和监控的场景。如果你的系统,是单体应用,或者微服务数量很少(几个),那么Istio可能有点杀鸡用牛刀,增加了复杂度,收益不大。如果你的系统,有几十个甚至上百个微服务,用了多种语言和框架,需要统一的流量管理、安全、可观测性,那么Istio可以带来很大的价值。
5. 就业前景不同
TypeScript,作为前端开发的标配之一,就业需求很大。现在,很多公司的前端岗位,都要求会TypeScript,特别是中大型公司,大型项目,基本都用TypeScript。而且,TypeScript不仅可以用于前端,也可以用于Node.js后端,就业面比较广。
Istio,作为新兴的微服务技术,就业需求也在增长,但是总体来说,还比较少。因为Istio还不够成熟,很多公司还在观望,没有大规模在生产环境中使用。而且,Istio通常是高级后端工程师、架构师、运维工程师需要掌握的技术,初级岗位,需求不多。
所以,从就业前景来看,TypeScript的就业需求更大,更容易找到工作;Istio的就业需求相对较少,但是竞争也小,薪资可能更高,适合有一定经验的开发者,往架构师方向发展。
四、到底该选哪个
对比了这么多,到底该选哪个呢?
这个问题,没有标准答案,要看你的具体情况。下面,我根据不同的情况,给出一些建议:
情况一:你是前端开发者,或者想往前端方向发展
如果你是前端开发者,或者想往前端方向发展,那么TypeScript是必学的。现在,TypeScript已经成为前端开发的标配,特别是中大型项目,基本都用TypeScript。学会TypeScript,可以提高你的代码质量,提高你的开发效率,也可以增加你的就业竞争力。
至于Istio,如果你是纯前端,可能暂时用不上,可以先不学。等你以后有需要,或者想往全栈方向发展,再学也不迟。
情况二:你是后端开发者,或者想往后端微服务方向发展
如果你是后端开发者,或者想往后端微服务方向发展,那么Istio是值得学习的。服务网格,是微服务的未来方向,学会Istio,可以让你掌握微服务的前沿技术,提高你的技术竞争力,也可以为你以后往架构师方向发展,打下基础。
但是,学习Istio之前,建议先打好微服务和Kubernetes的基础。如果连微服务、Docker、Kubernetes都不懂,直接学Istio,会很吃力,也学不好。
至于TypeScript,如果你是纯后端,可能暂时用不上。但是,如果你想往全栈方向发展,或者想做Node.js后端开发,那么TypeScript也是值得学习的。
情况三:你是初学者,还不确定方向
如果你是初学者,还不确定自己想往前端还是后端发展,那么建议先学TypeScript。原因有三个:
- TypeScript更容易上手,学习曲线平缓,初学者更容易入门,更容易获得成就感。
- TypeScript的就业需求更大,学会之后,更容易找到工作,更容易入行。
- TypeScript不仅可以用于前端,也可以用于Node.js后端,学会之后,前端后端都能用,就业面更广。
等你入门了,有了一定的基础,确定了自己的发展方向,再根据需要,学习Istio或者其他后端技术。
情况四:你有一定经验,想提升自己,往架构师方向发展
如果你有一定的开发经验,想提升自己,往架构师方向发展,那么建议两个都学。作为架构师,需要有广度,前端后端都要懂,不能只懂一个领域。TypeScript,可以让你更好地理解前端架构,更好地和前端团队协作;Istio,可以让你掌握微服务的前沿技术,更好地设计和架构微服务系统。
而且,这两个技术,代表了各自领域的发展方向,学会它们,可以让你保持技术敏感度,不被时代淘汰。
情况五:你在做技术选型,决定项目用哪个技术
如果你是在做技术选型,决定项目用哪个技术,那么:
- 前端项目,特别是中大型项目,推荐用TypeScript。TypeScript的类型系统,可以大大提高代码的可维护性,减少bug,提高开发效率。
- 后端微服务项目,是否用Istio,要看具体情况。如果微服务数量多,语言多样,需要统一管理和监控,可以考虑用Istio。但是,因为Istio还不够成熟,生产环境使用,需要谨慎,建议先在非核心业务中试点,验证没问题了,再逐步推广。如果微服务数量少,或者团队对Istio不熟悉,建议先用成熟的微服务框架(比如Spring Cloud、Dubbo),等Istio成熟了,再考虑迁移。
五、我的建议
最后,说一下我个人的建议。
我觉得,这两个技术,不是非此即彼的,而是可以互补的。如果你有精力,都学当然更好。但是,对于大多数人来说,时间和精力有限,需要有一个优先级。
我的建议是:先学TypeScript,再学Istio。
原因如下:
- TypeScript更成熟,更稳定:TypeScript已经发布6年了,非常成熟,稳定可靠,学会之后,马上就能在项目中使用,能立刻带来价值。Istio还在快速迭代中,还不够成熟,学习之后,可能还需要等一段时间,才能在生产环境中大规模使用。
- TypeScript更容易上手,就业需求更大:TypeScript学习曲线平缓,更容易入门,而且就业需求大,学会之后,更容易找到工作,更容易入行。对于初学者,或者想转行的人来说,先学TypeScript,性价比更高。
- TypeScript是基础,Istio是进阶:TypeScript,是一种编程语言,是基础技能,不管你做前端还是后端,都可能用得上。Istio,是一种基础设施,是进阶技能,需要有微服务和Kubernetes的基础,才能学好。先打好基础,再学进阶,更合理。
- 技术发展很快,先学成熟的,再学新兴的:技术发展很快,新技术层出不穷。我们不可能什么都学,什么都精通。建议先学成熟的、已经被广泛验证的技术,把基础打牢,然后再关注新兴的技术,根据需要,选择性地学习。TypeScript,已经是成熟的技术,是前端的标配,值得深入学习;Istio,是新兴的技术,还在发展中,可以先了解,等成熟了,再深入学习。
当然,这只是我的个人建议,每个人的情况不一样,发展方向不一样,选择也会不一样。最重要的是,根据自己的实际情况,选择适合自己的技术,然后深入学习,坚持实践。不要盲目跟风,不要什么热门就学什么,那样只会什么都学不精,什么都做不好。
六、写在最后
TypeScript和Istio,都是非常优秀的技术,都代表了各自领域的发展方向。
TypeScript,让JavaScript开发,变得更加规范,更加可维护,是前端开发的标配。Istio,让微服务管理,变得更加简单,更加统一,是微服务的未来方向。
这两个技术,领域不同,特点不同,适用场景不同,没有绝对的好坏,只有适合不适合。选择哪个,要看你的发展方向,你的基础,你的需求。
不管你选择哪个,最重要的是,深入学习,坚持实践。技术,不是看几篇文章,看几个视频,就能学会的,需要动手实践,在项目中使用,才能真正掌握。而且,技术发展很快,需要持续学习,不断更新自己的知识,才能不被时代淘汰。
最后,用一句话来结束这篇文章:"技术没有最好,只有最适合。根据自己的情况,选择适合自己的技术,深入学习,坚持实践,持续进步,这才是最重要的。"
希望这篇文章,能帮你理清思路,做出适合自己的选择。如果你有不同的观点,或者有什么问题,欢迎在评论区留言,我们一起交流。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录