「追求优雅的代码、追求挑战的环境,持续不断学习的程序员」
后端JAVA工程师,工作年资两年六个月。
前一份工作于宏碁(ACER)担任软体工程师,现服务于一间软体新创公司。
軟件开发,技术经理
E-mail : [email protected]
Skype : kudavid6
Phone : +886 986084686
Architecture:
使用Spring Cloud框架实现服务注册与发现、接口代理、服务熔断、配置中心,各服务提供者设计成可弹性集群布署、具复原能力的微服务。
使用quartz框架实现任务持久化、集群任务中心。
各服务节点通信主要建立在HTTP协议之上,遵守restful设计理念。
主要实现语言java,少部分专案选用Node.js。
Availability:
使用Kubernetes集群向多个node平均布署pods,为每个服务提供者设定一组虚拟网域以实现负载平衡。
服务节点设健康检测接口,由Kubernetes内建livenessProbe监控容器运行状态,并执行重启。
每个服务提供者建置两个以上pods,以实现滚动布署。
Partition tolerance:
应用隔离,使用Kubernetes将每个应用运行在独立jvm下。
每个服务提供者可弹性布署(关闭或集群布署),不影响消费者。
服务降级,暂时将不可用区域隔离,于重新运行时恢复服务。
Tools:
Maven、Nexus (Maven Private Repository)、
Jenkins、GitHub、DockerHub、Kubernetes
开发环境热布署:
GitHub 使用Webhook订阅GitHub事件,当dev分支有新版本提交后便触发Jenkins的工作任务,于Jenkins本机编译代码并透过Maven指令打包成可执行的war/jar后,透过ssh远端上传档案并执行脚本运行。 追踪每位开发者于伺服器上运行之程式版本,避免任何手动上传。
生产环境弹性布署:
预先在Kubernetes集群上创建Dm、Service,指定埠号、网域等。
建置Jenkins任务至GitHub拉取代码,透过Maven指令打包为可执行的jar,执行DockerFile創建image上传至DockerHub,运行k8s指令更新image完成滾動佈署。
AWS-EC2
AWS-Elastic Container Service
AWS-RDS
AWS-Simple Queue Service
AWS-Elasticsearch Service
AWS-CloudWatch
AWS-ElastiCache
GCP-Kubernetes Engine
GCP-Compute Engine
GCP-Cloud SQL
台湾司法院审判系统 2.0
司法院线上起诉系统
使用技术:
JDBC、JSP、Oracle、AJAX、JS、JQuery、HTML、CSS
聚合支付平台,集成各家第三方支付金流,为商户提供代收/代付服务,并记录商户馀额。
此系统包含三专案:
金流专案、后台专案、商户DEMO专案
使用技术:
JDBC、JSP、Timer、MySQL、AJAX、JS、JQuery、HTML、CSS
重构支付平台,将金流专案分模块重构,建立高扩充性系统以应付串接新渠道,并作分布式集群预备。
此次重构将金流专案拆分为九个模块(公司名隱藏為xxx):
xxx-channel-api(串接上游渠道介面)
xxx-bank-api(核心業務介面)
xxx-channel-xxx(串接上游渠道實作,此类专案共有十数个) * n
xxx-bank(核心業務實作,收付订单处理、商户处理等)
xxx-channel-proxy(渠道路由,供核心业务使用上由渠道服务)
xxx-notify(商户通知中心)
xxx-pay-batch(定时任务中心)
xxx-gateway(网关接口,此专案暴露接口提供服务)
xxx-monitor(网关健康检测,基于request、ssh重启服务之简单实现)
使用技术:
Spring、Spring MVC、MyBatis、JPA、MySQL、Express(Node.js)
设计模式:
Dependency Injection→自动注入介面调用不同实现类(实现代码间松散耦合)、单例多线程管理对象生命周期
AOP动态代理→增强所有对外接口,统一处理验签加解密、并过滤业务参数。
外部应用容错→上游系统瘫痪时,暂时让所有请求快速失败,并于外部服务恢复时批次补处理。
行级锁(悲观锁)→更新馀额或订单状态时皆使用悲观锁(此类接口可能涉及高并发)。
异步写入日志&操作记录→非核心的业务皆以异步线程池处理。
网关健康检测→基于request判定专案是否正常运行,否则自动重启服务。
博奕游戏包网服务,为平台提供串接游戏、会员系统、代理商后台、微信登入等服务。
此系统包含六个模块:
包网主系统(实现各外部游戏接口、钱包系统、玩家登入、申请表单等)
包网任务中心(完成每日凌晨结帐、定期与外部游戏钱包对帐并追踪馀额)
代理商后台(提供代理商建立多层下限关系、调整各级占成、返水、游戏设定、活动设定、转移点数等功能)
代理商后台任务中心(定期处理外部注单)
代理商后台插件(供前台显示统计资料)
金流插件(独立管理多个金流渠道,用于与外部API解偶)
使用技术:
Spring、Spring Boot、MyBatis、MySQL、SQS、Redis、WebSocket、Express(Node.js)、Sequelize(Node.js)
设计模式:
(与前专案相同模式不再列出)
多环境布署→一套代码交付给不同客户,利用环境变数启用不同的游戏服务。
队列服务→结帐任务拆分,消息生产者与消息消费者解耦。
跨服务会话共享→使用redis储存登入会员资讯。
缓存策略→将外部游戏统计资料存入redis中提升查询效率。
游戏开发系统商,提供包网自制开发的H5游戏(目前已上线七款)、系统商后台。
(此系统为微服务架构)
此系统包含专案:
xxx-cloud-register(微服务注册中心)
xxx-cloud-zuul(微服务接口代理)
xxx-cloud-schedule(游戏排程中心)
xxx-cloud-webSocket(通知中心)
xxx-cloud-data-source(游戏数据源接口)
xxx-cloud-launch(游戏启动接口)
xxx-cloud-weixin(微信登入口)
xxx-backstage-system(后台专案)
使用技术: Spring Boot、Spring Cloud、MyBatis、MySQL、SQS、Redis、WebSocket
设计模式:
(与前专案相同模式不再列出)
观察者模式→创建WebSocket Session,为使用者建立观察者物件,并加入一个或多个观察者名单,等待主题更新。
发布/订阅模式→服务节点订阅队列,外部开奖中心生产消息,发布者与订阅者经由消息代理沟通,实现松散耦合。
服务注册与发现→将服务提供者注册至中心供消费者调用。
接口代理→消费者透过接口代理(zuul)調用服務,將會話保存在代理上
缓存策略→游戏开局时将风控设定、各类型注单限额载入内存,玩家下注时加快校验速度。
利用缓存键值设计幂等接口,避免网路迟缓时重复处理下注。