I am in charge of Brightree IoT Infrastructure which is AWS Cloud and premisses.
Working on multiple services such as Lambda, Dynamodb, WAF, Cognito, Eventbridge, SQS, SNS, Elasticache etc.
Doing things with at least a reason
I have started my career since 2013 - 11 years of experience in software development. Full Stack Developer with 4 years system design for IoT domain.
My Skills:
- Working as Full Stack.
- Ruby on Rails
- Javascript (Nodejs, Reactjs, Nextjs).
- Python: Serverless, Socket (TCP/IP) and Devops tasks.
- System Design and Distributed Architecture.
- Domains are job recruitment, IoT.
- Event-Driven: Kafka, Rabbitmq, AWS EventBridge, SQS, SNS...
- Database: PostgresQL, MySQL, Mongodb, Dynamodb.
Current roles Technical Lead.
Current tasks:
- In charge of system design.
- In charge of technical consultant.
- Brainstorm ideas.
- Involve in Ruby, NodeJS, Python development.
- Administrator to mange AWS infras such as creating resources, devops, upgrade, integration etc.
https://github.com/nctruong/shopee
- NodeJS
- Kubernetes
- Microservices
https://github.com/nctruong/glassdoor
- Ruby on Rails
- GraphQL
- Elasticsearch
- NextJS
Manage IoT Infrastructure. Doing system designs. Leading team. Developing with multiple languages such as Ruby on Rails, Javascript and Python.
Re-write Mealsuite which is an healthcare project written in C# to Ruby on Rails app.
Scooget website. Social Network, Affiliate Marketing.
Working on multiple Logistic web and app.
Now the name changed to DXC. Global company, developing insurance product.
My first job. Insurance project.
I manage AWS Cloud Infrastructure
- Create VPC, manage EC2
- Create load balancer and routing Target Group.
- Manage SSL Certificates.
- Manage S3
- Create Severless by Lambda, Dynamodb, API Gateway.
- Event driven by SQS, EventBridge
- Use Cloudwatch for monitoring, debuging serverless.
- Deploy by sam cli, cloudformation.
- Deploy EKS.
- Use Elasticache for Caching.
- Use Cognito for authentication.
- Manage Route 53 for domain.
- Use CodeDeploy, CodeCommit, CodeBuild and CodePipe for CI/CD.
- Absolutely, using RDS for databases such as MySQL, Postgres, Aurora.
- Use WAF to protect VPC: rate limit, block IP etc.
We use AWS Cloud to build Infrastructure of IoT services.
Ruby on Rails
I mostly code Ruby on Rails for simple web server that we need development speed and regular deployment.
For exam, I developed Ostrich application for Symphony Creative Solution company. That is a logistic domain, it allows shipping company to create jobs and and trucking companies will bid jobs. This is B2B service so we don't have a lot of users, focusing on features. RoR is a good fit.
I developed https://itviec.com/ website which is for job hunting. This website we have a lot of users - thousands. Ruby on Rails is still a good fit. The ex-engineers started this app by RoR and Angular. I didn't see any problem with thousands of user until that time. I continue to develop my skill such as GraphQL, Elasticsearch, RSpec Unit Test etc. I also developed many applications but using RoR we have regular tech stacks such as Sidekiq, MySQL, Postgres etc along with AWS Cloud so I stop here for RoR.
NodeJS / NextJS
I started working with NodeJS when I joined Brightree. We use many other languages such as Ruby on Rails, Python, C++. I used NodeJS for serverless, developing lambda function to process sensor data. NodeJS is non-blocking IO language so it's good for concurrency. Ingesting sensor data is a job not requires heavy CPU. With serverless, this lambda scaled automatically. We never care about scaling. Along with NodeJS, we use dynamodb which is a good fit for high concurrency.
Python
Python is used to develop lambda function and Devops tasks. There are some analytics for sensor data we developed in Python. There are many libraries for that job. Python is a good fit. Any job that needs heavy CPU, I consider to use Python and Ruby.
Linux
We have many Linux devices on vessels. I have experiences on managing service units, linux crontab, logrotating, monitoring and debugging. Deploying ruby on rails and c++ software to run as services. Working on standalone premises, it requires TCP/IP tech stack.
Event Driven
I use AWS EventBridge for cloud application (IoT). I use Kafka for offline premises servers. We have customers that they don't want to launch their system online. For exam, the energy storage system, they want to use it locally.
Kafka has event storage which is good for investigating, replaying events, recover sensor data lost.
Docker && Kubernetes
I use docker && Kubernetes normally for development. Because I found that Serverless is better for production in many cases, especially the periodic jobs such as IoT data ingestion. No devops, no issue with it. Many companies which have kubernetes as legacy. Or we might want to manage our own microservices, full controlling apps, long running background, not depending on cloud providers, or reducing cost etc.
We can use both kubernetes and serverless. Kubernetes is for long running background jobs, socket, more over networking, storage and runtimes. Lambda has a max timeout 15m. Obviously, not ideal for streaming or socket, but for periodic tasks with duration lesser than 15m.
Regarding my experience, I work mostly on serverless and EC2. Because this is current requirement. Doing many unnecessary tech stacks causing cost and complexity increased.
- Serverless is a good choice for simple REST API and tasks. However, we can use Ruby on Rails for fast development of UI management. If team is familiar with Javascript like NextJS which is also a good choice for full stack app.
- Consider using NodeJS lambda for periodic IO tasks (< 15m) such as data ingestion.
- Heavy CPU-bounded tasks, can use Python.
- Data Analytics, we use Python.
- Simple web app we host in EC2, using ASG for auto scaling.
- Complex, large-scale apps we consider to use kubernetes.