Cyber Skyline tech stack and tricks
Dev and ops in all its glory
At Cyber Skyline, we’ve got a single product that needs to satisfy all the different needs of each of our clients. It needs to be fast, efficient, and scalable. Finding the right tools to make something like this is incredibly difficult and was the result of months of trial an error (and we’re still looking for better solutions). Hopefully you find this information useful.
Tech Stack
To be scalable, we split our service into 4 separate components.
Node
This machine runs the Nodejs actual application. It creates a process for every CPU core it has and bind them to ports in sequential order.
Load Balancer
This machine runs an nginx server that distributes the load across each of the Node instances available.
Static
This machine runs an nginx server that provides all the static content for the site.
DB
This machine runs a Mongodb and Redis server that store all the data for the deploy. The Redis server is used to store config values and to send updates to all the instances.
Development Tech
We use Node.js as our back end with client-side rendering for the front end.
React — Front End
React is self-described as the “V” in MVC. It lets us bind data to HTML elements meaning that by updating an object, the DOM will automatically update based on a pre-defined template.
Semantic-UI — Front End
A UI framework and strong competitor to bootstrap. It’s clean and, more importantly, easy to use. This library uses normal English conventions in its naming scheme. No more “.col-md-8” for columns, instead you can use “eight wide column”.
Express — Back End
Express is a framework for handling routes in your application. It makes it easy to add middleware into your application.
Mongoose — Back End
We use Mongodb as our primary database and Mongoose is a great Nodejs driver. You can define schemas as models which can have static or instance methods.
Socket.io — Back End/Front End
Socket.io provides real-time updates through websockets. No more hassle with AJAX requests and long polling. Socket.io provides duplex communication between the server and client so you can push updates as they happen. And don’t worry, if the client doesn’t support websockets, it will automatically fall back to AJAX.
Async — Back End/Front End
If you are familiar with Javascript, you might know about callback hell. The Async library provides a clean way to structure your asynchronous code.
Developments Tools
Our dev tools allow us to ensure that code is stable before it gets deployed into production
Github
Github is a code repository for git. We use Github to track new feature requests and bugs. We create a new branch for each issue. When the issue is resolved, a pull request is created and sent through automated testing before it is merged into the master branch.
Travis-CI
Travis is an automated testing service. When a new commit gets pushed to Github, it is picked up by Travis and run through all of our unit tests. This allows us to verify that bad code doesn’t end up in the master branch.
Slack
Slack is a communications tool that allows the entire team to communicate. Not only that, but it allows for integration with external services to alert you about events. Updates from Github and Travis get pushed to our team’s Slack so we can see get updates on features and bugs and get notified when builds fail.
Operations Tools
It’s important to get information back about your deployed services.
New Relic
New Relic is an application and system monitoring service. We use New Relic to give us stats about our application when it’s in production. It provides information on page views, application response times, and traces on slow transactions. Additionally, you can configure New Relic to check to see if your application is up and give you alerts about server downtime or resource thresholds.
Slack
Slack also integrates with New Relic so you can get push notifications when an alert gets triggered.