蘭陵N梓記

一指流沙,程序年华


  • 首页

  • 归档

  • 关于

  • 搜索
close

CloudNative初探

时间: 2017-01-06   |   分类: 技术     |   阅读: 1690 字 ~4分钟

随着日益普及的云计算,越来越多的传统应用迁移到云上。尤其是视频巨头NetFlix从2009年开始,放弃构建自己的数据中心,把所有应用迁移到AWS。NetFlix认为云环境下,everything will be failure。它基于微服务架构,以及Design for failure理论,构建出一系统非常成功的云应用(微服务),支持它的业务飞速发展。NetFlix认为他们比Amazon自己更懂得AWS。同时业界也提出了CloudNative概念,Netflix的应用也认为目前最为成功的CloudNative应用(参考Cloud Native at Netflix)。那什么是CloudNative?

概念

目前对CloudNative并没有明确的定义。15年,Google联合其他20家公司宣布成立了开源组织Cloud Native Computing Foundation(CNCF)。想通过开源的Kubernetes,在云计算领域占据主层地位。当然Kubernetes目前是一个以应用为中心容器编排,调度集群管理系统。它想做的是CloudNative Application的基石。从CNCF组织来看,CloudNative Application应该包含微服务,容器,CI/CD特征。

早在2010年,WSO2的联合他始人Paul Fremantle在业界最早提出CloudNative,认为有如下几个关键特征:

阅读全文 »

Go依赖管理机制

时间: 2016-11-20   |   分类: 技术     |   阅读: 3060 字 ~7分钟

无论何种语言,依赖管理都是一个比较复杂的问题。而Go语言中的依赖管理机制目前还是让人比较失望的。在1.6版本之前,官方只有把依赖放在GOPATH中,并没有多版本管理机制;1.6版本(1.5版本是experimental feature)引入vendor机制,是包依赖管理对一次重要尝试。他在Go生态系统中依然是一个热门的争论话题,还没有想到完美的解决方案。

看其它

我们先来看看其它语言怎么解决,例举两种典型的管理方式:

Java

开发态,可以通过maven和gradle工具编辑依赖清单列表/脚本,指定依赖库的位置/版本等信息,这些可以帮助你在合适的时间将项目固化到一个可随时随地重复编译发布的状态。这些工具对我来说已经足够优雅有效。但maven中也有不同依赖库的内部依赖版本冲突等令人心烦的问题。尤其是在大型项目中的依赖传递问题,若团队成员对maven机制没有足够了解下,依赖scope的滥用,会让整个项目工程的依赖树变得特别的巨大而每次编译效率低下。运行态,目前Java也没有很好的依赖管理机制,虽有classloader可以做一定的隔离,但像OSGi那种严格的版本管理,会让使用者陷入多版本相互冲突的泥潭。

Node.js

npm是Node.js的首选模块依赖管理工具。npm通过一个当前目录的 package.json 文件来描述模块的依赖,在这个文件里你可以定义你的应用名称( name )、应用描述( description )、关键字( keywords )、版本号( version )等。npm会下载当前项目依赖模块到你项目中的一个叫做node_modules的文件夹内。与maven/gradle不同的是,maven最终会分析依赖树,把相同的软件默认扁平化取最高版本。而npm支持nested dependency tree。nested dependency tree是每个模块依赖自己目录下node_modules中的模块,这样能避免了依赖冲突, 但耗费了更多的空间和时间。由于Javascript是源码发布,所以开发态与运行态的依赖都是基于npm,优先从自己的node_modules搜索依赖的模块。

阅读全文 »

思维图形化

时间: 2016-11-18   |   分类: 感想     |   阅读: 778 字 ~2分钟

曾经,我幼稚地认为:只有写好代码才能对产品最“大”的贡献。什么需求分析文档,架构设计文档,没有最终的代码落地,那就是一张张的空纸。那些职位高高在上的架构师们,就也是写写胶片,画画图,他们又不懂技术细节,天天开会讨论来,讨论去都是在空谈一切。没有我们这些屌丝写的代码,你让他们去实现,估计几年也搞不出来。我写代码的能力比他们顶上N个人;再看看人家老外,60/70岁了还在码代码。为什么我国到了30岁了,都不去写代码了,都去搞所谓的架构设计了。是他们写代码写不好才去干架构师活吗?

经过这么多年在产品中挖坑、填坑,发现我们的产品是越来越复杂,但使用上也是越来越复杂,问题也是越来越难理清。我们的问题到底是出在什么地方:

阅读全文 »

Archlinux on WSL

时间: 2016-10-30   |   分类: 笔记     |   阅读: 2172 字 ~5分钟

最近国庆某东活动,搞了一台HP的笔记本,系统是Win10。经过不断地折腾,在Win10上启用了Windows Subsystem for Linux(简称WSL),并在WSL上安装了Archlinux。加入Insider Preview会员计划,可以最快地获取Win10的最新内部版本,以便及时获取WSL的功能更新。

阅读全文 »

团队管理

时间: 2016-10-27   |   分类: 笔记   感想     |   阅读: 849 字 ~2分钟

最近由于Go语言项目,又带一个小团队。以前作为团队的Leader,总是遇到各种问题,尤其是如何管理好人很困惑。HW的组织相对是比较宽松的,内部号称是矩阵式,感觉一个团队的凝聚力个人还是来源于Leader的个人技术感召力。好吧,这个只是凭感觉的管理,这是远远不够的。

作为一个技术团队的小Leader,整体来讲,它面临”业务“,”人“,”事“这三个方面的工作展开。这些是来源公司内牛人们的一些总结,我把他们纪录下来,是为了我更好地开展工作。

阅读全文 »

软件变革下设计原则

时间: 2016-09-10   |   分类: 技术   感想     |   阅读: 3435 字 ~7分钟

传统大型软件系统 ,多以功能需求驱动设计与开发。在体系结构上是一个单体应用,变更修改往往是牵一而发动全身;在系统生态上是一个封闭系统,系统集成是大量定制开发。单体封闭的系统在交付中面临着越来越多的挑战,提升系统的竞争力首先是在软件架构上先行。软件系统发展也需像硬件一样不断地更新换代,软件架构设计需要输入新的思维。只有在思想上彻底地变革,才能摆脱原有的束缚与局限性。

体验为王

软件原本是一种信息技术发展不断地服务于各行各业,软件在实现上又是偏向技术性。如何让普通用户能够较好地使用软件,而不需要这方面的专业背景,需要思考软件减少数字与体验之间鸿沟。互联网思维一直讲求如何让用户感知到你对他的价值,而且把这个价值争取做到极致,超出用户的预期,这个就叫体验。只有用户产生体验之后,才能形成口碑。简而言之,体验的思想,就是从用户的感受出发,把它做到极致。

阅读全文 »

Go map key类型分析

时间: 2016-09-04   |   分类: 技术     |   阅读: 1947 字 ~4分钟

团队成员中大多是原来做Java,深受Java的影响,对于使用map问得最多的:map的key如何计算它的HashCode。下面试图通过讲解一些类型知识来解答。

map的key类型

map中的key可以是任何的类型,只要它的值能比较是否相等,Go的语言规范已精确定义,Key的类型可以是:

  • 布尔值
  • 数字
  • 字符串
  • 指针
  • 通道
  • 接口类型
  • 结构体
  • 只包含上述类型的数组。

但不能是:

  • slice
  • map
  • function
阅读全文 »

Go VIM开发环境

时间: 2016-09-03   |   分类: 技术     |   阅读: 1068 字 ~3分钟

背景

个人最近一直使用VSCode+Go插件来开发Go代码,虽然也觉得VSCode是目前最好用的Go的开发工具,但还是对VIM有点不可割舍,对我来说原因有三:

  • VIM可以在控制台使用,适合远程登陆到Linux进行代码调试修改
  • 配合Tmux使用,开启多个Pane各司其职,不同Pane之间快速切换
  • 有Tagbar,团队内代码串讲,能先看出每个文件的大纲,代码跳转也非常方便

截图

第一张是自己截的,后两张是使用各插件官方的:

snapshot

阅读全文 »
8 9 10 11 12 13 14 15 16
兰陵子

兰陵子

Programmer & Architect

164 日志
4 分类
57 标签
RSS 订阅
GitHub 知乎
© 2009 - 2022 蘭陵N梓記
Powered by - Hugo v0.101.0
Theme by - NexT
0%