Wednesday, October 26, 2016
Tuesday, October 18, 2016
What is software configuration management, SCM, CM?
Software Configuration Management
History
What is SCM
Modules of SCM
Configuration Manager
History:
US dept. of defense maintain
and operates tons of verities of military equipment’s. Obviously it’s tedious
if you don’t have a system to track and maintain the items. So they approached Software Engineering Institute (CMU) to
develop a better process to track, maintain, status etc. of military
inventories. It’s SEI and other groups of industry experts developed CMMI/SCM.
Actually SCM is part of CMMI. CMMI
contains 22 process areas, all these process talks about how to improve SDLC
life cycle from requirement to deployment (complete SDLC). CMMI model can be
adopted to other non-software industry as well.
Here onwards I specifically talk about SCM
(for software / IT).
Basically what SEI and
others they did was, gathered all of existing knowledge/experience of software
development/any other industry. They gone through day to day activities of
configuration management, pointed out main tasks, etc. Out of this knowledge/experience
and forethoughts they developed a process called SCM.
Main idea behind the
Process is to reuse the existing knowledge
of a domain(software or any), refine, improve and follow it. (In other words, don’t re-invent
the wheel)
Processes are key for success
of any project because, every individual have different thoughts so it creates
confusion. “Process brings order out
chaos”.
What is SCM:
“The purpose of Configuration Management
(CM) is to establish and maintain the integrity of work products using configuration
identification, configuration control, configuration status accounting, and configuration
audits. “– CMMI. I know its bit
vague, since SCM can be adopted by other industry’s they defined it in generic
term.
Simplified,
the purpose of SCM is:
Identify all the documents (design,
test plan …), source code, software’s/hardware related to a project.
Control
accidental release of software into prod/QA, prioritize the bugs …
Status
approved changes, revision history, change logs, change request records …
Audit
basically to check, whether your project actually follows CM process according to
SCM standard.
SCM, is involved in entire
SDLC. At first people think it’s just a source code control/repository but it’s
beyond. It involves from requirement to deployment. Don’t believe me, here you
go:
a Document’s repository
(requirements, designs, project plans, test plan, release plan, deployment plan…)
b Source
control/repository
c Build management
(branching / merging / baseline / backup the source code)
d Release management
e Deployment management
Typical SCM, in a project
looks like this: A configuration manager he or she will be responsible for overall
CM related activities like to create a CM plan, build plan, release plan,
conduct CM audits and to spread the CM process knowledge across the team.
Agile development methodology has introduced the term called Continuous integration / Continuous deployment,
basically they are fine-tuned version\variation or lean version of SCM process.
Govt. projects like space,
army, medical… they fully adhere to SCM and they can’t do fast phased
development like typical IT projects, because of product criticality like life
and death. So there is no one fit size
for all, some will follow lean scm and few typical cmmi scm.
Modules of SCM:
Typical SCM modules occupy a
book, but I try to explain briefly main modules of SCM are:
Document repository: SCM manages all the project related documents for ex: project
plan, test plan … here process tracks versions/stages of docs like from draft
to approve what changed, doc version numbers etc. usually docs will be stored
separate doc repository for ex: share point and not in source control.
CM Plan: It’s a document
which describes over all CM activities, like who is the CM, where is source
code located and its path, docs repository path, audit plans, build/release
activities. CM plan might have reference to build/release plans. Basically if
any outsider looks into this doc he or she should able to figure out about project
CM activities.
Source code management: Source control like TFS, SVN, Git are used to store the source
code. It’s were all the project related code will exist. From here developers will
check in or out.
Build systems: It’s a system / box
where code will be pulled from source control and do build of a project every
night or as soon as user checks in source code.
Change control: typically consist
of product stake holders, PM, CM … to control the change request to project.
Release management: is process where
you define how to push source code\binaries, bundle and deploy to Prod or QA. It
also contains release notes, known bugs\issues.
Audits: checks whether, users are checking the code with proper comment\issue
number, code backups are taken, process mentioned in the doc and followed are
matching etc.
Configuration (Release) Manager:
He or She will be responsible
for overall CM related activities inside a project. Its full time or part time
job based on the project scale. I try to briefly point out the CM roles and
responsibility:
a)
After project
initiation CM activities will start
b)
Create CM plan, co coordinating
with PM, Tech lead, project stake holders
c)
Over all in charge or
admin of source control. CM decides who and what access will users will have. Only
few of team members can have admin access to source control
d)
Creates build plan \
system. Plan will have at what frequency build will should happen, a unique id
for the build, whether to push binaries to specific location or not and many
other things
e)
Release management,
package creation, release notes …
f)
Spreading the CM
process awareness among the team members. By presentation, demos …
Summary:
You like it or hate it, but
you can’t ignore SCM. Waterfall, Agile, Spiral … they all follow one way or
other a CM process.
Wednesday, October 12, 2016
How web works - simplified
Internet, is network of computers,
from outside it looks very complex but internally it works on few simple principles.
Here principles I mean standards/protocols like HTTP, TCP/IP, html and also laws
of electromagnetism
(in simple, its law of light. it’s very important for internet, because all of
the data will be travelling near to speed of light otherwise internet will be very
slow. Trick here is whatever web request or response will be converted into binaries
and send them via wave pattern inside optic cables)
Before I explain components
of web. I just like to mention how standards or protocols helps to develop such
complex systems. Standards like HTTP is nothing but a few set of rules on which
two system will interact seamlessly because both the system know what is the rules/standard/language.
For ex: when traffic signal light is red we stop, green go. Same way web
browser and web server both have knowledge about HTTP and its language.
So basically when you click
on a link on web browser, it talks to a remote web server and gets back the data
what you have asked for and displays it on browser.
Following are the key
components of the web, together they make internet work. Each one of them is
big enough to accommodate a book or more. So I will try to explain each one briefly
and hope easy to understand. Actually there are lot more components like DNS,
OSI models, Firewall, and others involved in to make internet work but for us
to understand how web works below items are good enough.
HTTP,
Transport Layer (TCP/IP), Web Server, ISP, Browser, HTML5 (structure),
CSS3
(presentation), JavaScript (interactivity)
Browser:
First thing first, browser is a
software/window to internet through which user browse the web. How can it talk
to remote server, get data like text, picture, video, and display? Answer is
HTTP, html … Browser is a software/program built on standards/protocols like
http, html, css, javascript. For ex: when browser sees content like make me
bold it render/display like “make
me bold”, so it’s nothing rocket science. All the standards or rules of
http, html… are already coded inside software to how to display text, make
calls remote server, etc.
HTML, CSS, JavaScript: these
are language of web. HTML is for structuring the data, CSS to present the data
and JavaScript for interaction or behavior. Just html is enough for to display
data but it will very dull and boring. To give life to web CSS, JS came to
existence. When Tim (legend) invented the web he just thought to link the
documents and access it over network (I am simplifying itJ).
He had no idea one day web will explode so big like what we see today.
HTTP: hypertext transport protocol, is an application protocol.
Web browser/client sends http request to web server and web server returns http
response and content as html. HTTP has specified different way to request and
response. Here are the http methods : HEAD, GET, POST, PUT, DELETE, TRACE … don’t
worry if you don’t get it, these are verbs or actions clients request to server
for ex: HEAD means header of http request/response, GET means get a resource
from web server, POST means get or create a list of resource in the server. So
this is how server know how to respond if any request comes from client.
TCP/IP: Transporting of
http bundle to web server involves lot of behind the scene actors like OSI
models ( its seven layer of network, it
defines how data will travel from your computer to Ethernet to cable to
computer next to you or other side of the world). But in that layer TCP/IP is
important for us to understand how http request will be get pocketed,
addressed, transported and received. This
layer is very important because activities like 3 way handshake and other
connection establishment all this will happen less then fraction of second. (Thanks
to speed of lightJ)
ISP: is network of thousands of miles fiber optic cable,
spread across intercontinental or via satellite. Its organization provides
internet access. Through which all your web request and response will travel.
Web Server:
As name says its serve the web request. The server is just a software not the computer.
Like web browser, server is also a program coded to understand HTTP methods and
respond accordingly to http request. Basically server will respond with
documents, images, videos, etc. Web server may be right next door or across
ocean.
Summary:
Web/internet is very exciting place. Its part and parcel of our life now. Its
topic of worth many books, but I just thought briefly dot the maps and present
brief idea about web to users. I might have missed to explain few points or
explain in more detail, it’s just because to simplify. Thanks!
Wednesday, October 5, 2016
Cloud Computing - Demystified
Agenda:
To understand basics of Cloud Computing and it
flavors
Walkthrough IaaS a type of Cloud computing
Walk through layers of IaaS
Introduction VMware vSphere / Microsoft Hyper V
Pros/Cons
References/further studies
Basics of Cloud Computing and
it flavors
Cloud computing is a system
for enabling convenient, on-demand network access to a shared pool of
configurable computing resources e.g., servers, storage, applications/softwares,
and services that can be quickly provisioned(is term used
in IT to setup and ready to use) and released with minimal user effort or service
provider interaction.
If you google about cloud computing you see
similar description all over the internet. Let’s break it down. In earlier days, network designers while
modeling network plan they used to mention cloud diagram for unknown/somebody
else problem/work. When you/company/govt. anybody needs a pool of
computing resources like a computers, software, storage (photos, videos
remember iCloud or google drive), you can approach cloud service providers like
amazon, Microsoft and many others. Once you approach them and using their
applications/websites within few minutes you can set up your computing
resources.
So when you don’t want rent office space, hire network engineers, buy
computers upfront, less capital … solution is cloud computing.
I know still many grey areas about cloud
computing, let’s get into detail of it. Here is the trick/how cloud service
providers do the magic of providing cloud computing services on demand (means
when you need it start using it and when you don’t stop/cancel the service). Data Centers: is huge building, inside you see hundreds of
blade servers, storage racks, virtual servers, network setups … usually data
centers will be setup strategically(geographically, environmentally). Typically
with one data center cloud provider can provide service to hundreds of
customers.
In brief, log in to cloud provider website,
register and with few button clicks from your office/home couch you can setup a
computing resources. Isn’t ridiculously simple?
Flavors of Cloud: There are many jargons used inside cloud
computing like SaaS, PaaS,
IaaS,… these are all slightly different services provided over network
to end customers. Let’s look into them briefly
SaaS (Software as a Service): You got married,
photographer took excellent photos but you still you feel to do little touch up
to your photos. So will you buy photo editing software paying upfront $$$ just
to edit pics, after that you won’t use it or just rent it for a day get done
your work and just pay fraction of $? Obviously later, that’s it that is the
Software as a Service, pay per use. All you have do is login to SaaS provider
website pay per use and exit. Isn’t it cool?
PaaS (platform as a Service): It’s a computing
resource with windows, linux or mac platform. Within few clicks of button on
service provider website, a virtual machine will be ready for you, all you need
is internet and you can login to that vm from your laptop or desktop.
IaaS (Infrastructure as a Service): a pool of
virtual/physical machines, storage, networks. This flavor we shall discuss in brief
later sections.
You got a wonderful startup idea, but you don’t have
computers, required software’s and also lot of money. With little money and
help of cloud service providers you can set up 10 to 20 computers, software’s
with less time and start implementing your ideas. If successful continue the
service, worst case you can turn of cloud services.
Ex: Amazon EC2, Microsoft Azure, Office 365,
Outlook365, Gmail for organization, Salesforce...
Walkthrough IaaS
IaaS or Computing as a Service is basic Cloud
computing service. It is the first thing we can think of when somebody talks
about cloud computing. In fact researcher at Cambridge first developed virtual
machine software called Xen.
Basically idea of virtual machine is simple, On top of hardware/OS, a
hypervisor layer sits which helps to create virtual machines in which we can
install different OS and run parallel in a box. Hypervisor software takes
advantage of modern powerful hardware which at any point of time won’t be
consumed by user, so creates an abstract layer and distributes/shares computing
resources across multiple virtual machines.
IaaS: can be pool of virtual machines/physical
machines, storage, servers, network… IaaS provider will take care of
security/patch updates to the virtual/physical machines, on demand computing
power increase/decrease (RAM, Processors)
Walk through layers/internals
of IaaS
Here is what typical work flow looks like inside a cloud
company/datacenter, when you or an organization requests for computing
resources from cloud service provider. Its number sequential work flows as
follows.
UI Layer: First
you will land in cloud provider website. User interface/web site where
customers login from their location, and create/update cloud service request.
For ex: you are starting up a new business and you need 5 computers(virtual
machines). Just login like www.cloudprovider.com.
Business
Logic Layer: Once user submits his/her request like how many
virtual machines, software’s, operating system(platforms) they need. Business
layer where they have hardware, software stock details in DB. Number of
business logics will trigger and instantly give feedback to customer that how
much time/minutes will take to complete their request via UI. Business layer
does many checks like enough blade server available or not, storage and many
other tasks before invoking workflow engine.
Orchestration/Work
Flow Engine: After updating the user about request status,
business layer passes client request to work flow engine. Which will have
algorithms to execute clients request sequentially, ex: first create virtual
machine, install OS, applications like ms office… if any step fails it will
update system/db and exits. Some major cloud vendors provide work flow engine
live status so that they can what’s going on.
Virtual
Machine Management Center: Hypervisor(like VMware, MS Azure..) creates
virtual machines. Usually scripts will exists, workflow engine just invokes it
and script will does all the activities like, create, update VMs, installing a
server automation client inside VM…
Hypervisor is one of the key component of cloud
computing, because most of the cloud request is for virtual machines. Hypervisor provides excellent client\UI to
monitor and control the virtual machines, through which we can know whether a
partical VM is up or down, status of it. Using client you can increase ram,
processor, … I am just mentioned few feature of hypervisor but it does lot of
other complex tasks like clustering,
if a VM goes down, automatically another VM boots up its called high availability …
Server
Automation: as name says it does many server related
activities like installing OS in VM, patch’s/security updates.
Network
Management: set up network/vLan, IP management and other
network related activities.
Above mentioned points/steps involves complex tasks, I am just trying
to simply and give an idea what goes on inside a Datacenter. Each steps have
separate dedicated team, hundreds of scripts to execute automatically in
synchronized way and its team work, together they make cloud work.
Introduction VMware vSphere /
Microsoft Hyper V
Pros:
·
No upfront investment for infrastructure like servers,
software’s, storage, network. Pay per use.
·
No worries about security/patch updates. Cloud
service provider will take care of it.
·
On demand computing resource increase or decrease,
for ex: increase RAM, Processor when required and later turn it off
Cons:
·
You will be locked with one service provider, it’s
very hard to migrate to different provider in current cloud architecture
·
Availability. Even cloud giants experience
network/service outages.
·
Internet connectivity. No internet no cloud
·
Long term cloud seems more expensive than in house
server setup.
References
I recommend you to go through above links, they
have very good tutorials and documentation. If you like to become AWS / Azure
developer it takes some time to get your feet wet, but you can learn and start
developing programs with in short span of time. Writing small or simple
programs is key to understand a new concept
Subscribe to:
Posts (Atom)